【C语言】文件操作

文件

  • 使用文件可以将数据直接存放再电脑的硬盘上,实现数据持久化
  • 按功能分为程序文件(.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 写数据
在这里插入图片描述
用户程序调用由操作系统提供的子功能集合叫做系统调用

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值