前幾天由於工做的緣故學習了下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即偏移量。spa
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]); 參數的具體用法見文章後面給出的實例更有利於理解。code
feof函數就是判斷是否到了文件的末尾,原型int feof (FILE * pfile);遇到文件結束則返回非0值,不然返回0;fclose就是關閉文件,原型爲int fclose (FILE *pfile);關閉成功返回0,不然返回非0;orm
結合上面的介紹,我寫了一段代碼,涵蓋了上面大部分函數:
原型
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); } }
代碼的執行結果:
it
hangzhou
form
在工程文件夾下建立了文件test.txt,文件裏面的內容以下:
class