欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c文件操作整理

程序员文章站 2022-07-10 12:02:25
《c陷阱与缺陷》 编程者也许认为,程序一旦执行上述操作完毕,就可以*地进行读取和写入的操作了。遗憾的是,事实总难遂人所愿,为了保持与过去不能同时进行读写操作的程序的向下兼容性,一个输入操作不能随后直接紧跟输出操作,反之亦然。如果同时进行输入和输出操作,必须在其中插入fseek函数调用。 这个陷阱把 ......

《c陷阱与缺陷》

file *fp;
fp = fopen(file, "r+");

编程者也许认为,程序一旦执行上述操作完毕,就可以*地进行读取和写入的操作了。遗憾的是,事实总难遂人所愿,为了保持与过去不能同时进行读写操作的程序的向下兼容性,一个输入操作不能随后直接紧跟输出操作,反之亦然。如果同时进行输入和输出操作,必须在其中插入fseek函数调用。

这个陷阱把我坑了一把,所以将c库函数文件操作学习整理一番,方便自己以后查阅。

- file结构体
在stdio.h中定义的file结构体。

#ifndef _file_defined
  struct _iobuf {
    char *_ptr;             //文件输入下一个位置
    int _cnt;             //当前缓冲区相对位置
    char *_base;          //文件起始位置
    int _flag;              //文件标志
    int _file;            //文件描述符
    int _charbuf;          //检查缓冲区状况,如果无缓冲区则不读取
    int _bufsiz;          //缓冲区大小
    char *_tmpfname;      //临时文件名
  };
  typedef struct _iobuf file;
#define _file_defined
#endif

- 文件的打开

 

 file *fopen(const char *path, const char *mode);

 

1.功能
  按照mode规定的方式去打开path里指定文件。

2.参数
  path是个字符指针,指向打开或建立文件的字符串
  mode是指向文件处理的字符串的指针

c文件操作整理

3.返回值
  正常:被打开文件的file指针
  异常:null,未成功打开

- 文件的关闭

int fclose(file *fp);

1.功能
  关闭由fp指出的文件,调用操作系统提供的文件关闭功能。
2.参数
  fp:打开文件的file指针
3.返回值
  正常:0
  异常:eof

- 文件读取
①字符读取

int fgetc(file *stream);

1.功能
  从stream所指文件中读取一个字符
2.参数
  stream:要读取字符文件的file指针
3.返回值
  正常:返回读取字符
  异常:返回eof



②字符串读取

char *fgets(char *s, int size, file *stream);

1.功能
  从stream中读取大小为size-1的字符,最后加上字符串结束符'\0'
2.参数
  s:接收字符串的地址,数组或是指针
  size:读取字符大小
  stream:读取的文件的file指针
3.返回值
  正常:字符串首地址(char *s的地址)
  异常:null

使用feof或是ferror去判别是否到达文件尾部和发生错误。


- 文件的写入
①字符写入

int fputc(int c, file *stream);

1.功能
  把字符c写入stream指向的文件
2.参数
  c:字符
  stream:写入的文件的file指针
3.返回值
  正常:写入字符
  异常:eof

②字符串的写入

int fputs(const char *s, file *stream);

1.功能
  将str写入stream指向的文件中
2.参数
  s:写入字符串
  stream:要写入字符串的文件的file指针
3.返回值
  正常:写入的字符串长度
  异常:返回null

使用feof或是ferror去判别是否到达文件尾部和发生错误。

③格式化数据写入

int fprintf(file *stream, const char *format, ...);

1.功能
  与printf功能相同,写入文件中
2.参数
  stream:写入的文件的file指针
  format:字符串指针,其中包含写入数据的格式
3.返回值
  无


- 二进制形式的读写

①二进制形式读取文件数据

size_t fread(void *ptr, size_t size, size_t nmemb, file *stream);

1.功能
  按二进制形式将stream指向的文件的size*nmemb的数据读到ptr数据区去
2.参数
  ptr:viod指针类型,读到数据存放的首地址
  size:数据块的大小,字节数
  nmemb:一次读多少数据块
  stream:要读取数据文件的file指针
3.返回值
  正常:实际读取数据块个数
  异常:0(具体通过feof()和ferror()判定)

②二进制形式写数据

size_t fwrite(const void *ptr, size_t size, size_t nmemb,file *stream);

  与fread相反

③二进制形式读取一个整数

int getw(file *stream);

④二进制形式写入一个整数

int putw(int w, file *stream);

- 文件状态检查
①文件结束

int feof(file *stream);

1.功能
  判断文件是否结束
2.返回值
  0:文件未结束
  1:文件结束

②文件读写出错

int ferror(file *stream);

1.功能
  检查读写stream指向的文件是否出错
2.返回值
  0:无错误
  1:出错

③错误标志清除

void clearerr(file *stream);

1.功能
  清楚stream指向的文件的错误标志

- 文件的操作的文件
①当前文件位置

long ftell(file *stream);

1.功能
  文件开头与当前的偏移量
2.返回值
  正常:位移量
  异常:-1

②倒带

void rewind(file *stream);

1.功能
  文件位置指针重新指向开头

③fseek

int fseek(file *stream, long offset, int whence);

1.功能
  使文件定位移到指定位置:基于whence的相对offest位置处
2.参数
  offset:字节位移量
  whence:
    seek_set 0 文件开头
    seek_cur 1 文件当前位置
    seek_end 2 文件末尾
3.返回值
  正常:当前位置
  异常:-1

- exit()函数

void exit(int status);

1.功能
使程序立即终止执行,将缓冲区数据输出并关闭所有打开文件
2.参数
0:正常终止

 


 

作者:devil-wei

 

出处:https://www.cnblogs.com/devil-wei/

 

版权声明:本文版权归作者,转载请标注文章作者与出处