1. 程式人生 > >c/c++檔案操作總結

c/c++檔案操作總結

1、FILE

         FILE是一個結構體,記錄了檔案的相關資訊,其在stdio.h中定義如下:

         struct _iobuf

          {
                char*_ptr;
                int  _cnt;
                char*_base;
                int  _flag;
                int  _file;
                int  _charbuf;
                int  _bufsiz;
                char*_tmpfname;
        };
         typedef struct _iobuf FILE;

2、EOF

         EOF在stdio.h中被定義為-1,只是一個返回值,當fgetc()等函式遇到錯誤或者遇到檔案尾時都會返回此值,因此不能憑此返回值判斷是否遇到了檔案尾。判斷是否遇到檔案尾的正確做法是使用feof函式。

3、feof函式

宣告在stdio.h中,函式原型為:int feof(FILE *stream)

         其作用是判斷檔案當前指標所指的位置是否為檔案尾(假如檔案最後一個字元的指標為p,則p+1的位置就會被判定為檔案尾),是則返回非零值,否則返回零值。

4、fgetc函式

         宣告在stdio.h中, 函式原型為:int fgetc(FILE * stream)

         其作用是獲取檔案當前指標所指向的字元,若成功則將檔案當前指標向後移動一個位元組以指向新字元,並返回剛剛獲取到的字元;若失敗或者檔案當前指標指向檔案尾,則返回EOF(-1)。

5、fgets函式

         宣告在stdio.h中, 函式原型為:char *fgets(char *buf, int bufsize, FILE *stream)

         其作用是讀取從檔案當前指標所指字元開始的bufsize-1個字元,並在末尾新增一個‘0’後拷貝到buf中,最後將檔案當前指標指向下一個未讀的新字元。但若未讀滿bufsize-1個字元前遇到了換行符(特指Unix下的換行符‘\n’)或者檔案尾,則結束此次讀取,後續操作一樣(‘\n’不會被丟棄,也會被拷貝到buf中,檔案指標會指向‘\n’後的新字元;但若是檔案尾,則檔案指標就指向檔案尾,會使下次讀取返回NULL)。這裡的bufsize就是buf的大小。若成功則返回buf,若失敗或者讀取的第一個字元就是檔案尾則返回NULL。

6、fseek函式

         宣告在stdio.h中,函式原型為:int fseek(FILE *stream, long offset, int fromwhere)

         其作用是將檔案當前指標重新指向從fromwhere偏移offset個位元組的地方。成功返回0,失敗返回-1。

         其中offset為正值則向後偏移,為負值則向前偏移。fromwhere值及其含義為:

         SEEK_SET(0): 檔案開頭

         SEEK_CUR(1): 當前位置

         SEEK_END(2): 檔案結尾