C语言-文件操作

文件操作函数

导论

  1. 文件操作函数的头文件就在标准库<stdio.h>中
  2. C语言在对文件进行操作时,系统会自动在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。
  3. 文件在读取时,读取的文件会记录在一个结构体变量中,并会返回一个指向该结构体的指针,取名为FILE(该结构体名称)。

fopen函数和fclose函数

描述
  • fopen函数,根据传入的文件名和打开方式来打开文件
  • fclose函数,根据传入的文件指针来关闭文件
声明
  • FILE * fopen ( const char * filename, const char * mode );
  • int fclose ( FILE * stream );

fgetc函数和fputc函数

描述
  • fgetc函数,从 文件指针所指向的输入文件中读取一个字符,返回值是读取的字符,失败会返回EOF
  • fputc函数,将字符写入到文件指针所指向的输出流中,写入成功,返回写入的字符,失败会返回EOF
声明
  • int fgetc( FILE * fp );
  • int fputc( int c, FILE *fp );

fgets函数和fputs函数

描述
  • fgets函数,从文件指针所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。
  • fputs函数,把字符串写入到文件指针所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。
声明
  • char *fgets( char *buf, int n, FILE *fp );
  • int fputs( const char *s, FILE *fp );

fscanf函数和fprintf函数

描述
  • fscanf函数,从文件指针中指向的输入流中读取格式化输入
  • fprintf函数,发送格式化输出流到文件指针所指向的输出流中
声明
  • int fscanf(FILE *stream, const char *format, …)
  • int fprintf(FILE *stream, const char *format, …)

fread函数和fwrite函数

描述
  • fread函数,从给定的流中读取数据到一个数组中(读二进制文件)
  • fwrite函数,将一个数组中的数据写入到给定的流中(写二进制文件)
声明
  • size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
  • size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

总结

文本写是要把写的数据转换成字符串,再写出去,写出去的内容是可读的,但存储值全部都变了
文件写是将内存中二进制的形式写出去,存储值不变,但如果打开来看,是一堆乱码的情况。

对比一组函数
  • 序列化函数
  • scanf,从控制台中读
  • fscanf,从文件中读
  • sscanf,从字符串中读
  • 反序列化函数
  • printf,打印到控制台中
  • fprintf,打印到文本文件中
  • sprintf,打印到字符串中
  • 序列化:即将数据类型转换为字符串,将信息按可见方式写入文件,或通过网络传输,均要将其转为字符串。
  • 反序列化:将字符串转化为其对应的值
文件结束的判定
  1. 在文件读取过程中,不能用feof函数的返回值直接用来判断文件的是否结束,它应用于文件读取结束时,判断是读取文件失败结束还是遇到文件尾结束。
  2. 文本文件读取是否结束,判断返回值是否为EOF (fgetc),或者NULL(fgets)
  3. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
其余文件操作函数
  1. fseek,int fseek ( FILE * stream, long int offset, int origin );根据文件指针的位置和偏移量来定位文件指针
  2. ftell,long int ftell ( FILE * stream ); 返回文件指针相对于起始位置的偏移量
  3. rewind,void rewind ( FILE * stream ); 让文件指针的位置回到文件的起始位置
  4. fflush,刷新缓冲区,才能将数据写入文件(硬盘)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值