前几天因为工作的缘故学习了下c语言对文件操作的一些常用函数,主要涉及到的函数有fopen,fseek,fwrite,fread,fclose和feof,下面我打算具体陈述下我对这几个函数用法的理解。
fopen函数
作用:打开一个文件,成功返回指向该流的文件指针,失败返回NULL
原型:FILE *fopen(const char *path, const char *mode); 其中path是文件的路径(绝对路径);mode是流形态;常用的流形态有 r(以只读的方式打开,且文件必须存在),rb+(读写打开一个二进制文件),w(以只写的方式打开文件,若文件存在则清零重新写入,不存在则建立),a(以追加只写的方式打开文件,若文件存在则写入的数据加在原来的尾部,没有则建立)等。
fseek函数
作用:重新定位流(数据流/文件)内部的文件指针,函数执行成功返回0,失败返回-1
原型:int fseek(FILE *pfile, long offset, int fromwhere);其中fromwhere设定从哪个位置开始偏移(通常取值有三种 SEEK_SET:文件开头;SEEK_CUR:当前位置;SEEK_END:文件结尾);offset即偏移量。
fwrite和fread函数
作用:向文件 写/读 数据块,成功返回实际写入数据项个数(或读出的数据项个数)
原型:size_t fwrite (const void *buf, size_t size, size_t count, FILE *pfile);
size_t fread (const void *buf, size_t size, size_t count, FILE *pfile);其中size的单位是字节,count为需要写/读size大小的次数;buf是准备输入的数据块的地址(或存储读出来数据块的地址)。
fprintf函数
作用:将格式化的数据写入文件,执行成功返回写入的字符数,失败则返回一个负数(此函数和fwrite类似,但是区别还是很大,有待进一步研究,还要注意和sprintf的区别)
原型:int fprintf(FILE *pfile, const char *format, [argument]); 参数的具体用法见文章后面给出的实例更有利于理解。
feof函数就是判断是否到了文件的末尾,原型int feof (FILE * pfile);遇到文件结束则返回非0值,否则返回0;fclose就是关闭文件,原型为int fclose (FILE *pfile);关闭成功返回0,否则返回非0;
结合上面的介绍,我写了一段代码,涵盖了上面大部分函数:
void file_oper() { FILE * pfile = NULL; char *str_write = "hangzhou\n"; char str_read[] = ""; int count = 1; int year = 2012; pfile = fopen("test.txt", "w+"); if(NULL == pfile) { printf("open file failure!\n"); return; } fwrite(str_write, strlen(str_write), count, pfile); fprintf(pfile, "huawei %d", year); fseek(pfile, 0, SEEK_SET); fread(str_read, 8, 1, pfile); str_read[8] = '\0'; printf("%s\n", str_read); if(NULL != pfile) { fclose(pfile); } }
代码的执行结果:
hangzhou