FILE 指標的相關操作

2021-08-29 20:28:39 字數 3708 閱讀 5545

file是在c標準庫中(stdio.h)中定義的乙個結構體,通常用指標的方式儲存在記憶體中,其內容描述了乙個檔案,或者說」流「更當。
1. 開啟檔案

您可以使用 fopen( ) 函式來建立乙個新的檔案或者開啟乙個已有的檔案,這個呼叫會初始化型別 file 的乙個物件,型別 file 包含了所有用來控制流的必要的資訊。

file *fopen( const char * filename, const char * mode );
在這裡,filename 是字串,用來命名檔案,訪問模式 mode 的值可以是下列值中的乙個:

模式描述

r開啟乙個已有的檔案,允許讀取

w開啟乙個檔案,允許寫入檔案。如果檔案不存在,則會建立乙個新的檔案。從檔案的開頭寫入內容。如果檔案存在,則該內容會唄清楚,重新寫入。

a開啟乙個文字檔案,以追加模式寫入檔案。如果檔案不存在,則會建立乙個新檔案。在這裡,您的程式會在已有的檔案內容最後追加內容。

r+開啟乙個文字檔案,允許讀寫檔案。

w+開啟乙個文字檔案,允許讀寫檔案。如果檔案已存在,則檔案的內容會被清空,如果檔案不存在,則會建立乙個新檔案。

a+開啟乙個文字檔案,允許讀寫檔案。如果檔案不存在,則會建立乙個新檔案。讀取會從檔案的開頭開始,寫入則只能是追加模式。

「r」 = 「rt」

開啟乙個文字檔案,檔案必須存在,只允許讀

「r+」 = 「rt+」

開啟乙個文字檔案,檔案必須存在,允許讀寫

「rb」

開啟乙個二進位制檔案,檔案必須存在,只允許讀

「rb+」

開啟乙個二進位制檔案,檔案必須存在,允許讀寫

「w」 = 「wt」

新建乙個文字檔案,已存在的檔案將被刪除,只允許寫

「w+」 = 「wt+」

新建乙個文字檔案,已存在的檔案將被刪除,允許讀寫

「wb」

新建乙個二進位制檔案,已存在的檔案將被刪除,只允許寫

「wb+」

新建乙個二進位制檔案,已存在的檔案將被刪除,允許讀寫

「a」 = 「at」

開啟或新建乙個文字檔案,只允許在檔案末尾追寫

「a+」 = 「at+」

開啟或新建乙個文字檔案,可以讀,但只允許在檔案末尾追寫

「ab」

開啟或新建乙個二進位制檔案,只允許在檔案末尾追寫

「ab+」

開啟或新建乙個二進位制檔案,可以讀,但只允許在檔案末尾追寫

對於檔案使用方式有以下幾點說明:

凡用「r」開啟乙個檔案時,該檔案必須已經存在,且只能從該檔案讀出。

用「w」開啟的檔案只能向該檔案寫入。若開啟的檔案不存在,則以指定的檔名建立該檔案,若開啟的檔案已經存在,則將該檔案刪去,重建乙個新檔案。

若要向乙個已存在的檔案追加新的資訊,只能用「a」方式開啟檔案。如果指定檔案不存在則嘗試建立該檔案。

在開啟乙個檔案時,如果出錯,fopen將返回乙個空指標值null。在程式中可以用這一資訊來判別是否完成開啟檔案的工作,並作相應的處理。

2. 關閉檔案

為了關閉檔案,請使用 fclose( ) 函式。函式的原型如下:

int fclose( file *fp );
如果成功關閉檔案,fclose( ) 函式返回零,如果關閉檔案時發生錯誤,函式返回 eof。這個函式實際上,會清空緩衝區中的資料,關閉檔案,並釋放用於該檔案的所有記憶體。eof 是乙個定義在標頭檔案 stdio.h 中的常量。

3. 寫檔案

把字元寫入到檔案中

int fputc( int c, file *fp );
函式 fputc() 把引數 c 的字元值寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回寫入的字元,如果發生錯誤,則會返回 eof。您可以使用下面的函式來把乙個以 null 結尾的字串寫入到流中:

把字串寫入到檔案中

int fputs( const char *s, file *fp );
函式 fputs() 把字串 s 寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回乙個非負值,如果發生錯誤,則會返回 eof。

也可以使用 int fprintf(file *fp,const char *format, …) 函式來寫把乙個字串寫入到檔案中

fprintf(fp,"%d或其他的格式化字串",....)
還可以使用size_t fwrite(const void *ptr, size_t size, size_t nmemb, file *stream)把 ptr 所指向的陣列中的資料寫入到給定流 stream 中

引數

返回值

如果成功,該函式返回乙個 size_t 物件,表示元素的總數,該物件是乙個整型資料型別。如果該數字與 nmemb 引數不同,則會顯示乙個錯誤。

4. 讀檔案

下面是從檔案讀取單個字元的最簡單的函式:

int fgetc( file * fp );
fgetc() 函式從 fp 所指向的輸入檔案中讀取乙個字元。返回值是讀取的字元,如果發生錯誤則返回 eof.

下面的函式允許您從流中讀取乙個字串:

char *fgets( char *buf, int n, file *fp );
函式 fgets() 從 fp 所指向的輸入流中讀取 n - 1 個字元。它會把讀取的字串複製到緩衝區 buf,並在最後追加乙個 null字元來終止字串。

如果成功,該函式返回相同的 buf 引數。如果到達檔案末尾或者沒有讀取到任何字元,buf 的內容保持不變,並返回乙個空指標。

如果發生錯誤,返回乙個空指標。

如果這個函式在讀取最後乙個字元之前就遇到乙個換行符 『\n』 或檔案的末尾 eof,則只會返回讀取到的字元,包括換行符。您也可以使用int fscanf(file *fp, const char *format, ...)函式來從檔案中讀取字串,但是在遇到第乙個空格字元時,它會停止讀取。

例如

#include int main()

test.txt中存的資料為

this is testing for fprintf…

this is testing for fputs…

產生下列結果:

1: this

2: is testing for fprintf...

3: this is testing for fputs...

因為首先,fscanf() 方法只讀取了 this,因為它在後邊遇到了乙個空格。其次,呼叫 fgets() 讀取剩餘的部分,直到行尾。最後,呼叫 fgets() 完整地讀取第二行。

c 庫函式size_t fread(void *ptr, size_t size, size_t nmemb, file *stream)從給定流 stream 讀取資料到 ptr 所指向的陣列中。

成功讀取的元素總數會以 size_t 物件返回,size_t 物件是乙個整型資料型別。如果總數與 nmemb 引數不同,則可能發生了乙個錯誤或者到達了檔案末尾。

注:

FILE檔案指標相關操作

檔案的開啟模式 w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。w 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。wb 只寫方式開啟或新建乙個二進位制檔案,只允許寫資料。wb 讀寫方式開啟或建立乙個二進位制檔案,...

File相關操作

public static void closequietly closeable closable trycatch ioexception e 下面給出的是通用的讀檔案方法,獲取到每行資料後,可以對每行資料進行處理 public static string read string filenam...

C C 檔案操作(一) FILE指標

語言檔案系統稱為流檔案 stream 正文流 正文檔案 二進位製流 二進位制檔案 正文檔案的操作一般是順序檔案 二進位制檔案的操作都是隨機檔案。一 檔案操作的一般過程 定義檔案指標 file 開啟檔案 fopen 對檔案進行讀寫 二 系統已定義的與檔案操作有關的資料結構全都在stdio.h中 fil...