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

【C语言】文件操作

这里写目录标题

  • 文件
  • 1.文件的打开和关闭
  • 2.文件操作函数
    • 1.字符操作函数
    • 2.文本行操作函数
    • 3.格式化输入输出
    • 4.二进制输入输出
    • 5.文件的随机读写
      • fseek
      • ftell
      • rewind
  • 3.文本文件和二进制文件
  • 4.文件读取结束的判定
  • 5.文件缓冲区

文件

  • 使用文件可以将数据直接存放再电脑的硬盘上,实现数据持久化
  • 按功能分为程序文件(.c .obj .exe),和数据文件(内容为程序运行时读取的数据),这里文件操作是对于数据文件而言
     

1.文件的打开和关闭

  • 被使用的文件会在内存中开辟一个文件信息区,是一个FILE结构体变量,记录文件相应信息,在文件打开时由系统自动创建并填充信息,一般用FILE*来维护
    在这里插入图片描述
  • 打开和关闭通过 fopen 和 fclose 实现
  • 若打开失败,则返回NULL,注意检查返回值
  • 文件读取方式 “r” 在文件不存在时报错,“w” 和 “a” 在文件不存在时自动创建
	FILE* pf = fopen("test.txt", "r");
	if( pf == NULL )
	{
		perror("fopen");
		return 1;
	}
	....
	fclose(pf);
	pf = NULL;

 

2.文件操作函数

流(stream):
运行C语言程序时,会默认打开3个FILE*类型的流,stdin(标准输入流),stdout(标准输出流),stderr(标准错误流)
在这里插入图片描述

 

1.字符操作函数

fputc
将内存中的字符输出(写入)到文件,返回值为ASCII值或EOF
在这里插入图片描述
 
fgetc
从文件中读取字符输入至内存,每次读取成功pf向后偏移一个字符
在这里插入图片描述
对标准输入输出流操作

	int ch = fgetc(stdin);
	fputc('a', stdout);

 

2.文本行操作函数

参数string为字符数组的地址

在这里插入图片描述
 

读取n-1个字符,会向*string放入’\0’
在这里插入图片描述
 

3.格式化输入输出

  • scanf,针对标准输入流(stdin)的格式化输入语句
  • fscanf,针对所有输入流(stdin,文件流)的格式化输入语句
  • sscanf,从一个字符串中读取格式化的数据
     
  • printf,针对标准输出流(stdout)的格式化输出语句
  • fprintf,针对所有输出流(stdout,文件流)的格式化输出语句
  • sprintf,把格式化的数据转换成字符串

sscanf 和 sprintf 可用于序列化和反序列化,可用于一些字符串与类型数据转换
 

4.二进制输入输出

只使用于文件,字符串中二进制写入和文本写入一样
fread 以二进制读取数据
在这里插入图片描述

fwrite 将数据以二进制写入
在这里插入图片描述
 

5.文件的随机读写

fseek

根据相对偏移量重新定位文件指针

  • 偏移量为相对起始(SEEK_SET)、当前(SEEK_CUR)、末尾(SEEK_END)的偏移量
    在这里插入图片描述
    打开存有 abcdef 的文件
    fgetc 读取时也会自动偏移
    在这里插入图片描述
     

ftell

返回文件指针相对于起始位置的偏移量

  • 以 long int 返回当前位置偏移量
    在这里插入图片描述

rewind

让文件指针的位置回到文件的起始位置
在这里插入图片描述
在这里插入图片描述
 

3.文本文件和二进制文件

二进制文件:内存中的数据是以二进制形式存储的,不加转换直接输入到外存
文本文件:内存中的数据从二进制转换为ASCII值,以ASCII值形式存储到外存
如有整数10,以二进制形式存储占4个字节(整型),以ASCII值存储占2个字节(一个字符一个字节,字符’1’和字符’0’)
在这里插入图片描述
 

4.文件读取结束的判定

文件读取结束时(末尾结束或错误结束),使用 feofferror判断文件读取结束的原因
feof(pf)返回真则文件读取到末尾结束,ferror(pf)为真则发生错误读取结束

关于 fgetc 和 fgets 读取结束的返回值
fgetc 在读取到文件末尾和遇到错误读取结束时都会返回EOF,遇到文件末尾返回EOF同时会设置一个状态,这个状态用 feof 来检测,遇到错误返回EOF同时也会设置一个状态,这个状态用 ferror 来检测
fgets 在读取到文件末尾和遇到错误读取结束时都会返回NULL,遇到错误返回NULL同时同样也会设置一个状态,这个状态用 ferror 来检测

 

5.文件缓冲区

当写数据到文件中时,并不会直接写到文件中,而是先将数据放到输出缓存区,在缓存区刷新fclose关闭文件时刷新或者fflush主动刷新)时才会将其中的数据写入文件中,同样从文件中读取数据输入到内存中时,也会先将数据放到输入缓冲区,缓冲区刷新时才会将数据输入到内存中
在这里插入图片描述
如使用 fwrite 写数据
在这里插入图片描述
用户程序调用由操作系统提供的子功能集合叫做系统调用


http://www.kler.cn/a/5129.html

相关文章:

  • 神策数据如何帮助企业实现营销自动化?
  • yolov5模型训练流程
  • 2023西安交通大学软件工程915考研经验帖(初试+复试)
  • 11 容器常用命令
  • *(void**)解析——如何设计可以在32位下访问到内存区域的前4个字节,在64位下访问到前8个字节?
  • 面试官:ThreadLocal了解吗?用过吗?原理是什么?底层数据如何存储的?
  • [oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
  • 蓝桥杯刷题冲刺 | 倒计时8天
  • 2023年超全的Android面经(23/30)设计模式安卓源码案例
  • 学术论文等级与分类标准——JCR
  • Element Plus 实例详解(五)___Scrollbar 滚动条
  • 语句【C++】
  • linux创建守护进程
  • Mybatis(一)-------
  • shell 脚本之一键部署安装 Nginx
  • 并查集和哈希表的实现
  • 【Python】线程
  • java企业级信息系统开发学习笔记02初探spring——利用组件注解符精简spring配置文件
  • 第14章_MySQL事务日志
  • 2009年9月Java全国计算机等级考试二级笔试试卷