友情提示:本文共有 2568 个字,阅读大概需要 6 分钟。
推荐《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是指向文件处理的字符串的指针
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的字符,最后加上字符串结束符" "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.参数
本文如果对你有帮助,请点赞收藏《c语言文件操作整理》,同时在此感谢原作者。