当前位置: 首页 > news >正文

C语言文件操作:打开关闭,读写

程序文件

源程序文件(后缀为.c)
目标文件(Windows环境后缀为.obj)
可执行文件(Windows环境后缀为.exe)

fputc

	FILE* pf = fopen("test.txt","w");if (pf == NULL){printf("%s\n", strerror(errno));return 1;}//写文件char i = 0;for (i = 'a'; i <= 'z'; i++){fputc(i, pf);}

fgetc

	FILE* pf = fopen("test.txt","r");if (pf == NULL){printf("%s\n", strerror(errno));return 1;}//读文件int ch = 0;while ((ch=fgetc(pf)) != EOF){printf("%c ",ch);}

fputs

	FILE* pf = fopen("test.txt","w");  //w在文件打开的时候就清理掉数据了//写文件的时候,如果有内容,会销毁再重新写数据//FILE* pf = fopen("test.txt", "a");  写a可以实现追加if (pf == NULL){printf("%s\n", strerror(errno));return 1;}//写一行数据fputs("hello world\n", pf);

fgets

	FILE* pf = fopen("test.txt","r");  if (pf == NULL){perror("fopen");return 1;}//读一行数据char arr[20];fgets(arr, 5, pf); //读5个字符,但自己加一个\0,实际读四个printf("%s\n", arr);  //hello中只读了hell

fprintf


struct s
{char arr[10];int age;float score;};
int main()
{	struct s s = { "zs",22,23.3f };FILE* pf = fopen("test.txt","w");  if (pf == NULL){perror("fopen"); //fopen是自己加的return 1;}fprintf(pf,"%s %d %f", s.arr, s.age, s.score);//关闭文件fclose(pf);pf = NULL;return 0;
}

fscanf
格式化输入函数

struct s s = { 0 };FILE* pf = fopen("test.txt","r");  if (pf == NULL){perror("fopen"); //fopen是自己加的return 1;}fscanf(pf, "%s %d %f", s.arr, &(s.age), &(s.score));printf("%s %d %f", s.arr, s.age, s.score);

任何一个c程序,只要运行起来,就会默认打开三个流
它们的类型都是FILE*
FILE* stdin - 标准输入流 (键盘)
FIEL* stdout - 标准输出流(屏幕)
FILE* stderr - 标准错误流(也是屏幕)

	fprintf(stdout,"%s %d %f", s.arr, s.age, s.score);  //打印到屏幕上去

fwrite
以二进制的形式写进文件中

	struct s s = {"zhangsan",25,50.5f};FILE* pf = fopen("test.txt","wb");  if (pf == NULL){perror("fopen"); return 1;}fwrite(&s, sizeof(struct s), 1, pf);

fread
以二进制的方式读

struct s s = {0};FILE* pf = fopen("test.txt","rb");  if (pf == NULL){perror("fopen"); return 1;}fread(&s, sizeof(struct s), 1, pf);printf("%s %d %f", s.arr, s.age, s.score);

scanf是针对标准输入的格式化输入语句
printf是针对标准输入的格式化输出语句
fscanf是针对所有输入流的格式化输入语句
fprintf是针对所有输入流的格式化输出语句
sscanf从一个字符串中转化成一个格式化的数据 (序列化)
sprintf 把一个格式化的数据转化成字符串(反序列化)

	struct s s = {"zhangsan",20,55.5f};struct s tmp = { 0 };char buf[100] = { 0 };sprintf(buf, "%s %d %f", s.arr, s.age, s.score);//sprintf 把一个格式化的数据写到字符串中,本质是把一个格式化的数据转换成字符串printf("%s\n", buf);sscanf(buf, "%s %d %f", tmp.arr, &(tmp.age), &(tmp.score)); //从字符串中获取一个格式化的数据到tmp中printf("%s %d %f\n", tmp.arr, tmp.age, tmp.score);

在这里插入图片描述
fseek定位文件指针,ftell计算当前文件指针的偏移量

	fseek(pf, 2 ,SEEK_SET); //文件内容abcdef  直接定位到cint ch = fgetc(pf); printf("%c ", ch);printf("%d\n", ftell(pf)); //3fseek(pf, 2, SEEK_CUR); //文件内容abcdef  直接定位到fch = fgetc(pf);printf("%c ", ch);printf("%d\n", ftell(pf)); //6fseek(pf, -1, SEEK_END);ch = fgetc(pf);printf("%c ", ch);printf("%d\n", ftell(pf)); //6

rewind让文件指针位置回到文件起始位置

	rewind(pf);ch = fgetc(pf);printf("%c ", ch); //a

feof应用于当文件读取结束的时候,判断是读取失败结束还是文件尾结束

文本文件读取是否结束判断,判断返回值是否为EOF或者NULL
fgetc判断是否为EOF
fgets判断返回值是否为NULL

二进制文件的读取结束判断判断返回值是否小于实际要读的个数
fread判断返回值是否小于实际要读的个数

	//判断是什么原因结束的if (ferror(pf)){puts("I?O error when reading ");}else if (feof(pf)){puts("end of the file reached successfully");}

文件缓冲区
因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件
如果不做,可能导致读写文件的问题

http://www.lryc.cn/news/359384.html

相关文章:

  • 启智CV机器人,ROS,ubuntu 20.04 【最后一步有问题】
  • React-生成随机数和日期格式化
  • 11Linux学习笔记
  • 004 仿muduo实现高性能服务器组件_Buffer模块与Socket模块的实现
  • 研发效能DevOps: Ubuntu 部署 JFrog 制品库
  • hadoop学习笔记
  • 使用dockerfile快速构建一个带ssh的docker镜像
  • linux部署运维1——centos7.9离线安装部署涛思taos2.6时序数据库TDengine
  • Linux shell编程学习笔记51: cat /proc/cpuinfo:查看CPU详细信息
  • Ps:调整画笔工具
  • 香橙派 AIpro上手体验并验证车道线识别算法
  • 为啥装了erlang,还报错erl: command not found?
  • 容器技术基础理论与常用命令:必知必会,效率翻倍!
  • ChatGPT Edu版本来啦:支持GPT-4o、自定义GPT、数据分析等
  • Spark RDD案例
  • 【线性表 - 数组和矩阵】
  • Springboot 开发 -- 跨域问题技术详解
  • 【Qt】之【项目】整理可参考学习的git项目链接(持续更新)
  • 2024年5月个人工作生活总结
  • Kafka Java API
  • pushd: not found
  • 【第十三节】C++控制台版本坦克大战小游戏
  • 酷得单片机方案 2.4G儿童遥控漂移车
  • 【为什么 Google Chrome 打开网页有时极慢?尤其是国内网站,如知网等】
  • FastAPI - 数据库操作5
  • HTML静态网页成品作业(HTML+CSS)—— 冶金工程专业展望与介绍介绍网页(2个页面)
  • Flutter基础 -- Dart 语言 -- 注释函数表达式
  • “仿RabbitMQ实现消息队列”---整体架构与模块说明
  • springboot如何快速接入minio对象存储
  • 第六届“智能设计+运维”国产工业软件研讨会暨2024年天洑软件用户大会圆满召开