「C/C++」 标准文件操作大全
一、设备文件(运行程序时会默认打开这三个设备文件)
- stdin:标准输入,默认为当前终端(键盘),我们使用的scanf、getchar函数默认从此终端获得数据。
- stdout: 标准输出,默认为当前终端(屏幕),我们使用的printf、puts函数默认输出信息到此终端。
- stderr:标准错误,默认为当前终端(屏幕),我们使用的perror函数默认输出信息到此终端
二、文件操作函数
1、perror(char strMsg):打印出错信息,参数是自己加的注释,为字符串类型
2、 FILE *fopen(const char*fileName,const char*mode)
-
返回一个文件指针,并且打开路径为fileName的文件。失败返回NULL
-
FILE *p = fopen("D:\\Windows_lib\\Desktop\\test.txt", "a"); if (p) {cout << "file open success"<<endl;cout<<fputc('c', p); } else {perror("fail to open file:"); } fclose(fp);
打开模式(mode) | 含义 |
---|---|
r或rb | 以只读方式打开一个文本文件(不创建文件,若文件不存在则报错) |
w或wb | 以写方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件) |
a或ab | 以追加方式打开文件,在末尾添加内容,若文件不存在则创建文件 |
r+或rb+ | 以可读、可写的方式打开文件(不创建新文件) |
w+或wb+ | 以可读、可写的方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件) |
a+或ab+ | 以添加方式打开文件,打开文件并在末尾更改文件,若文件不存在则创建文件 |
3、int fclose(FILE * stream)
- 关闭文件,参数是要关闭的文件流指针
三、操作文件
1、int feof(FILE*stream)
-
EOF表示文件结束符(end of file),EOF是等于-1的
-
检测是否读取到了文件结尾。判断的是最后一次“读操作的内容”,不是当前位置内容(上一个内容)
-
while (!feof(fp)) //文件没有结束,则执行循环 {char ch = fgetc(fp);printf("%c", ch); } fclose(fp);
2、int fputc(int ch , FILE* stream)
-
将ch转换为unsigned char后写入stream指定的文件中
-
ch是需要写入文件的字符。
-
成功返回写入文件的字符,失败返回-1
-
FILE *p = fopen("D:\\Windows_lib\\Desktop\\test.txt", "a"); fputc('c', p); fclose(fp);
3、int fgetc(FILE *stream)
-
从stream指定的文件中读取一个字符
-
成功返回读取的字符,失败返回-1
-
FILE *p = fopen("D:\\Windows_lib\\Desktop\\test.txt", "r"); cout<<(char)fgetc(p); fclose(fp);
4、int fputs(const char*str,FILE*stream)
-
将str所指定的字符串写入到stream指定的文件中,字符串结束符 ‘\0’ 不写入文件
-
成功返回0,失败返回-1
-
FILE *p = fopen("D:\\Windows_lib\\Desktop\\test.txt", "a"); cout<<fputs("\nthis is a msg\n", p); fclose(fp);
5、char *fgets(char *str,int size,FILE*stream)
-
从stream指定的文件内读入字符,保存到str所指定的内存空间,
直到出现换行字符、读到文件结尾或是已读了size - 1个字符为止
,最后会自动加上字符 ‘\0’ 作为字符串结束。通常用返回值判别是否读取完毕 -
成功返回读取的字符串,读到文件为或出错返回NULL
-
若要读取全部的文件内容,一般搭配while循环一直读取,直到返回NULL表明读取到了文件末尾
-
FILE *p = fopen("D:\\Windows_lib\\Desktop\\test.txt", "r"); char buf[1024]; if (p) {auto q = fgets(buf, sizeof buf, p);if(!q) cout<<"读取完毕";cout<<buf; } fclose(fp);
四、格式化文件操作
1、int fprintf(FILE *stream,const char *format,数据)
-
根据参数format字符串来转换并格式化数据,然后将结果输出到stream指定的文件中,指定出现字符串结束符 ‘\0’ 为止。
-
类似sprintf,sscanf,将格式写入文件里
-
成功返回实际写入文件的字符个数,失败返回-1
-
int year=2023; int month=3; int day = 3; FILE *fp = fopen("D:\\Windows_lib\\Desktop\\test.txt", "a"); if (fp) {int t = fprintf(fp, "year:%d,month:%d,day:%d", year, month, day);if(t!=-1) puts("write successfully!"); } fclose(fp);
2、int fscanf(FILE *stream,const char *format,数据)
-
从stream指定的文件读取字符串,并根据参数format字符串来转换并格式化数据。
-
类似sscanf,sprintf,将格式读取出来
-
成功则返回参数个数,失败返回-1
-
int year, month, day; FILE *fp = fopen("D:\\Windows_lib\\Desktop\\test.txt", "r"); if (fp) {int t = fscanf(fp, "%d %d %d", &year, &month, &day);if(t!=-1) puts("read successfully!");cout<<year<<" "<<month<<" "<<day<<endl; } fclose(fp);
五、按照块读写文件
1、size_t fwrite(const void *ptr,size_t nmemb,size_t count,FILE *stream)
-
以数据块的方式给文件写入内容
-
ptr:准备写入文件数据的地址
-
nmemb:写入文件的块数,写入文件数据总大小为:size * nmemb
-
count: size_t 为 unsigned int类型,此参数指定写入文件内容的块数据大小
-
成功返回实际写入文件数据的字节数,和count值相等。失败返回0
-
typedef struct {char id;char age;char name[20]; } STD;STD xx = {'1', '2', "ssxaxas"};FILE *fp = fopen("D:\\Windows_lib\\Desktop\\test.txt", "w");//"w"会清空文件,无法撤回if (fp) {int t = fwrite(&xx, 1, sizeof xx, fp);puts("Yes!");cout << t << endl; } fclose(fp);
2、size_t fread(void *ptr,size_t nmemb,size_t count,FILE *stream)
-
以数据块的方式从文件中读取内容
-
ptr:存放读取出来数据的内存空间
-
size: size_t 为 unsigned int类型,此参数指定读取文件内容的块数据大小
-
nmemb:读取文件的块数,读取文件数据总大小为:size * nmemb
-
typedef struct {char id;char age;char name[20]; } STD;STD xx = {'1', '2', "ssxaxas"};FILE *fp = fopen("D:\\Windows_lib\\Desktop\\test.txt", "r"); if (fp) {int t = fread(&xx, 1, sizeof xx, fp);puts("Yes!");cout << xx.age << endl; } fclose(fp);
六、文件的随机读写
1、int fseek(FILE *stream,long offset, int whence)
-
移动文件流(文件光标)的读写位置。
-
offset:根据whence来移动的位移数(偏移量),可以是正数,也可以负数,如果正数,则相对于whence往右移动,如果是负数,则相对于whence往左移动。如果向前移动的字节数超过了文件开头则出错返回,如果向后移动的字节数超过了文件末尾,再次写入时将增大文件尺寸。
-
whence:其取值如下:
SEEK_SET:从文件开头移动offset个字节
SEEK_CUR:从当前位置移动offset个字节
SEEK_END:从文件末尾移动offset个字节
-
FILE *fp = fopen("D:\\Windows_lib\\Desktop\\test.txt", "a"); if (fp) {fputs("hello,world!",fp);fseek(fp,0,SEEK_SET);fputs("use_fseek-->",fp);// fp的内容应该是 use_fseek-->hello,world!puts("Yes!"); } fclose(fp);
2、long ftell(FILE *stream)
- 获取文件流(文件光标)的读写位置。一般用来测光标在文件的偏移位置
- 成功返回当前文件流,文件光标的位置。失败返回-1
3、void rewind(FILE *stream)
- 把文件流(文件光标)的读写位置移动到文件开头。
4、int stat(const char *path,struct stat *buf)
-
获取文件状态信息
-
path:文件名
-
buf:保存文件信息的结构体,stat结构体如下,所需头文件如下
-
成功返回0,失败返回-1
-
struct stat {dev_t st_dev; //文件的设备编号ino_t st_ino; //节点mode_t st_mode; //文件的类型和存取的权限nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1uid_t st_uid; //用户IDgid_t st_gid; //组IDdev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号off_t st_size; //文件字节数(文件大小)unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)unsigned long st_blocks; //块数time_t st_atime; //最后一次访问时间time_t st_mtime; //最后一次修改时间time_t st_ctime; //最后一次改变时间(指属性) };
-
#include <sys/types.h> // 所包含的头文件 #include <sys/stat.h>struct stat buf; // 定义一个结构体对象来接受信息int ret = stat("D:\\Windows_lib\\Desktop\\test.txt", &buf);if (ret == -1)puts("file not found!"); else cout<<buf.st_size<<endl; // 打印目标文件的字节数
七、文件的修改操作(均需要自己添上后缀名)
1、int remove(const char *pathname);
- 删除路径为pathname的文件
- 成功返回0,失败返回-1
2、int rename(const char *oldPath,const char *newPath)
- 把oldpath的文件名改为newpath
- 成功返回0,失败返回-1
八、Windows和Linux文本文件的区别
-
b是二进制模式的意思,b只是在Windows有效,在Linux用r和rb的结果是一样的
-
Unix和Linux下所有的文本文件行都是\n结尾,而Windows所有的文本文件行都是\r\n结尾
-
在Windows平台下,以“文本”方式打开文件,不加b:
-
当读取文件的时候,系统会将所有的 “\r\n” 转换成 “\n”
-
当写入文件的时候,系统会将 “\n” 转换成 “\r\n” 写入
-
以"二进制"方式打开文件,则读\写都不会进行这样的转换
-
在Unix/Linux平台下,“文本”与“二进制”模式没有区别,“\r\n” 作为两个字符原样输入输出
九、文件缓冲区
ANSI C标准采用“缓冲文件系统”处理数据文件。
所谓缓冲文件系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。
如果从磁盘向计算机读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量) 。
-
磁盘文件,一般保存在硬盘、U盘等掉电不丢失的磁盘设备中,在需要时调入内存
-
在内存中对文件进行编辑处理后,保存到磁盘中
-
程序与磁盘之间交互,不是立即完成,系统或程序可根据需要设置缓冲区,以提高存取效率
1、刷新缓冲区的3中方法
- 缓冲区满
- fflush函数强制刷新
- 程序正常退出
2、int fflush(FILE *stream)
- 更新缓冲区,让缓冲区的数据立马写到文件中。
- 成功返回0,失败返回-1
相关文章:
「C/C++」 标准文件操作大全
一、设备文件(运行程序时会默认打开这三个设备文件) stdin:标准输入,默认为当前终端(键盘),我们使用的scanf、getchar函数默认从此终端获得数据。stdout: 标准输出,默认…...
一款SAST工具需要支持多少种编译器呢?
除了Java语言,C#语言之外,C、C语言是编译器类型最多的编程语言,有几十种编译器,这些编译器方言为研发SAST工具带来了巨大的工作量,很多产品由于无法适配客户的编译器,导致无法检测。下面我们罗列一下国外和…...
jvm mat分析dump文件
jvm调优中,经常使用dump来分析是否存在大对象导致频繁full gc,以下为使用步骤: 一、获得服务进程 ps -ef | grep list-app | grep -v grep 二、生成dump文件 jmap -dump:formatb,filexxx.dump pid jmap -dump:filetest.hprof,formatb 3307…...
python16行代码获取原神全角色+全语音
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 本来是不玩原神的,但是实在是经不住双重诱惑呀~ 毕竟谁能拒绝角色风景超级好看又可以爬树、炸鱼、壶里造房子、抓小动物、躲猫猫的游戏捏~ 今天点进官网~角色得配音让我沉陷其中,于是 我决定把他们爬…...
链接投票二维码制作制作投票链接视频选举投票制作
关于微信投票,我们现在用的最多的就是小程序投票,今天的网络投票,在这里会教大家如何用“活动星投票”小程序来进行投票。我们现在要以“信赖挚友”为主题进行一次投票活动,我们可以在在微信小程序搜索,“活动星投票”…...
HTTP 协议
HTTP(hypertext transport Protocol);超文本传输协议,是浏览器与万维网服务器之间通信的规则。 规定了客户端与服务端之间互相发送内容的格式,客户端发给服务端的叫 请求协议,服务端返回给客户端的为 响应…...
公司新招了个人,一副毛头小子的样儿,哪想到是新一代卷王····
内卷,是现在热度非常高的一个词汇,随着热度不断攀升,隐隐到了“万物皆可卷”的程度。 在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是…...
TSDF学习记录
【唐宇迪】三维重建-TSDF通俗解读 人工智能入门教程 水泡动画模拟(Marching Cubes) - 算法小丑 - 博客园 (cnblogs.com) TSDF 流程分析 首先需要构建一大块空区域采用体素网格来存储该区域需要计算每个体素的TSDF值及其权重 原理简述 SDF值&#x…...
【Linux】孤儿进程
在Linux中,如果子进程运行时,父进程因为某些原因先行终止,就称该子进程为孤儿进程。 我们编写如下代码: 子进程一直在运行,父进程运行一段时间后自动终止。运行该程序观察现象: 最开始时,子进程…...
ChatGPT解答:python大批量读写ini文件时,性能很低,有什么解决方法吗,给出具体的思路和实例
ChatGPT解答: python大批量读写ini文件时,性能很低,有什么解决方法吗,给出具体的思路和实例 ChatGPTDemo Based on OpenAI API (gpt-3.5-turbo). python大批量读写ini文件时,性能很低,有什么解决方法吗&…...
MySql主键id不推荐使用UUID
前言 昨天在某个技术群中,有个老哥发送了一个技术视频:讲的是一个毕业生面试被问,前后端的交互ID是使用自增的吗?为什么不使用UUID?最后的解释是说性能问题,这个引起了我的兴趣,查了一下资料总…...
密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)
文章目录SM1 对称密码SM2 椭圆曲线公钥密码算法SM3 杂凑算法SM4 对称算法同态加密密态计算和隐私计算安全多方计算技术安全多方计算的应用场景对称加密算法非对称加密算法(公钥加密)参考文章SM1、SM2、SM3和SM4 为了保障商用密码的安全性,国家…...
保险行业中【内容行政系统】模块功能的实现
以下是一个基本的保险行业中的内容行政系统功能模块,包括对保单、理赔等方面的处理: 创建保单表创建理赔表创建保单查询视图创建理赔查询视图创建新保单更新保单状态创建理赔更新理赔状态-- 创建保单表 CREATE TABLE policies ( policy_id NUMBER PRIM…...
C语言入门知识——(7)VS2022的C语言基础调试
1、什么是bug 这个故事很多人都知道 1947年9月9日:第一个“Bug”被发现的时候:“1949年9月9日,我们晚上调试机器的时候,开着的窗户没有纱窗,机器闪烁的亮光几乎吸引来了世界上所有的虫子。果然机器故障了,…...
数据库可视化开发工具内容介绍
在现代化办公环境中,数据管理的重要性不言而喻。对于企业来说,将企业内部的数据做好规划和管理,可以给企业提升办公协作效率,为企业高层做出正确的经营决策奠定基础。本文主要给大家介绍的是数据化可视化开发工具的内容࿰…...
坚如磐石:TiDB 基于时间点的恢复(PiTR)特性优化之路丨6.5 新特性解析
本文介绍了 TiDB 数据库的基于时间点的恢复(PiTR)特性,该特性允许用户将数据库恢复到特定时间点,从而避免丢失重要数据。文章首先介绍了 PiTR 技术的基本概念和工作原理,接着探讨了 TiDB 对 PiTR 的优化,包…...
【云原生】K8S中PV和PVC
前言 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。…...
24小时稳定性爆肝测试!国内外5款远程控制软件大盘点
本文目录前言一、ToDesk远程控制二、向日葵远程控制三、RayLink四、TeamViewer五、AnyDesk总结前言 不论你的职业是什么,从事互联网工作基本就离不开远程,从远程安装系统到远程搞设计,再到做服务器的调控,都需要靠远程来协助完成…...
【Java集合框架】篇三:List接口
1. List接口及主要实现类特点 List:有序、可重复(“动态”数组);因而常常使用List替换数组,因为List 的容量是动态的。 ArrayList:底层使用Object[]存储 线程不安全,添加、查找效率高 LinkedL…...
【算法经典题集】二分(持续更新~~~)
😽PREFACE🎁欢迎各位→点赞👍 收藏⭐ 评论📝📢系列专栏:算法经典题集🔊本专栏涉及到的知识点或者题目是算法专栏的补充与应用💪种一棵树最好是十年前其次是现在二分整数二分机器人…...
【c++】2023杭州月薪个税计算(chatGPT帮忙加注释)
参考信息 杭州市的个人所得税起征点是每月5000元。 个人所得税税率标准: 1、工资范围在1-5000元之间的,包括5000元,适用个人所得税税率为0%; 2、工资范围在5000-8000元之间的,包括8000元,适用个人所得税税率为3%; 3、工…...
【TypeScript】的上手学习指南!
目录TS简介TypeScript是什么?为什么要推荐使用TypeScript生态支持安装TypeScriptTS简介 TypeScript是什么? TypeScript官网 简介:TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。TypeScript可以在任何浏览器、任何计…...
红黑树(Insert())
文章目录红黑树代码红黑树性质红黑树vsAVL树红黑树的实现Insert()情况一:如果我插入的新节点时红色的情况二:叔叔是黑色或者不存在情况三: cur红,p为红,g为黑,u不存在或者为黑-双旋检查erase()红黑树vsAVL树红黑树的应用:红黑树 二叉搜索树 …...
MOV指令使用
mov用于数据传送。之后分为目的操作数和源操作数,目的操作数必须是通用寄存器或者内存单元:源操作数可以是具有相同数据宽度的通用寄存器或者内存单元,还可以是立即数。传送指令只影响目的操作数内容,不改变源操作数内容。 如&am…...
解释一下RecyclerView的适配器内部方法
RecyclerView的适配器(Adapter) 是一个连接数据模型和RecyclerView的桥梁,它在RecyclerView中提供了数据和布局之间的连接。下面是RecyclerView适配器中常用的几个方法的解释: 1.onCreateViewHolder(ViewGroup parent, int view…...
集合框架及背后的数据结构
1.介绍: Java 集合框架,又被称为容器是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。 其主要表现为将多个元素置于一个单元中,用于对这些元素进行快速、便捷的存储、检索 、管理 ,即平时我们俗称的增删查改…...
【强化学习】强化学习数学基础:蒙特卡洛方法
强化学习数学方法:蒙特卡洛方法举个例子举个例子1:投掷硬币The simplest MC-based RL algorithm举个例子2:Episode lengthUse data more efficientlyMC without exploring starts总结内容来源将value iteration和policy iteration方法称为mod…...
BI分析工具软件有哪些
最近发现很多人讨论BI数据分析,今天给大家全面介绍下BI数据分析相关的信息。首先给大家科普一下,什么是BI分析。 BI分析其实是指通过BI分析工具,对企业内部和外部的大量数据进行收集、整理、处理和分析,以提供有价值的洞察&#x…...
2023爱分析·RPA软件市场厂商评估报告:容智信息
目录 1. 研究范围定义 2. RPA软件市场分析 3. 厂商评估:容智信息 4. 入选证书 1. 研究范围定义 RPA即Robotic Process Automation(机器人流程自动化),是一种通过模拟人与软件系统的交互过程,实现由软件机器人…...
设计模式之七大原则(二)——里氏替换原则、依赖倒转原则
1.里氏替换原则 里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫女士在 1987 年的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》)里提…...
桥梁毕业设计代做网站/竞价托管代运营多少钱
Spread.NET 是一个功能、布局与 Excel 高度类似的 .NET表格控件,可全面满足 WinForm、ASP.NET、XAML 和 WinRT 等平台下表格数据处理、数据可视化开发需求。Spread.NET 支持 462 种 Excel 公式,提供可嵌入系统的类Excel设计器和全面开放的 API࿰…...
wordpress 公众号 采集器/太原网站建设制作
本节书摘来异步社区《贝叶斯方法:概率编程与贝叶斯推断》一书中的第1章,第1.7节,作者:【加】Cameron Davidson-Pilon(卡梅隆 戴维森-皮隆),更多章节内容可以访问云栖社区“异步社区”公众号查看…...
东营建设信息网站/安卓优化大师app下载
青海是中国西北部的一个省份 Qinghai is a province in Northwest China 平均海拔3000米以上 The average height above sea level is more than 3000 meters 大部分地区为高山和高原。 Most areas are high mountains and highland 青海湖得名于全世界最大的咸水湖青海湖…...
wordpress模板在线编辑/长沙seo优化
1 、结对项目的案例与论文 论文已阅读。 2、性格对合作的影响 我的MBTI为:ISFJ 照顾者型(内向实感情感判断)——值得信赖和依靠。 在团队合作中,外倾型的人一般会较为热情对工作积极…...
网站做竞价优化/网络推广公司有多少家
在我们制作界面的时候经常会看到网上有很多的绚丽的界面他们的图形都非常炫酷。如何才能快速的制作出这样效果呢?那么今天MICU教大家如何使用2部方法制作炫酷的APP界面。喜欢的缘友们一起来学习吧。先看看效果图第1步绘制图形新建图层选择画板(ps cc 2015才有的功能…...
广东企业网站制作/电商怎么做营销推广
安装的的时候能够通过 Help》Eclipse Marketplace的 搜索方式安装 或者 Help》Install New SoftwareName:Propertys URL:http://www.guh-software.de/eclipse/ 方便使用,方便编辑 转载于:https://www.cnblogs.com/mfrbuaa/p/3762166.html...