利用檔案流實現檔案讀寫

2021-08-02 23:14:42 字數 3107 閱讀 9581

儲存在磁碟上的檔案中的資料被定義為檔案流。檔案流不但包括了檔案的真實資料還包含了檔案目錄、檔案系統元資料、訪問控制列表以及這個檔案的擴充套件屬性等。

在c語言中,用

file

結構來表示檔案流。通過

fopen()

、fread()

、fwrite()

以及fprintf()

等函式對檔案流操作實現檔案的讀寫。

通過fopen()函式實現檔案的開啟或建立。該函式的格式為

file* fopen(const char* path, const char* mode)

其中,引數path表示要開啟或者建立的檔案的路徑;

mode

表示開啟檔案的方式,返回值是

file

結構的指標。

可以通過指定mode的值實現檔案的建立或開啟。其中,

mode

值是」r」時表示以唯讀的方式開啟檔案,如果檔案不存在,則返回值是null;」r+」表示以可讀可寫的方式開啟檔案,如果檔案不存在,則返回值是null;」w」表示以可寫的方式開啟檔案,如果檔案存在,則清空檔案,如果檔案不存在則建立檔案;」w+」表示以可讀可寫的方式開啟檔案,如果檔案存在,則清空檔案,如果檔案不存在則建立檔案。

file* stream;

stream = fopen(「hou59tian.txt」, 「w+」);

通過fread()函式實現檔案的讀取。該函式的格式為

size_t fread(void* buff, size_t size, size_t count, file* stream)

其中,引數buff用來儲存從檔案中讀取到的資料;

size

引數表示從檔案流中讀取的單個元素的大小,單位是位元組;

count

表示從檔案流中讀取元素的個數;

stream

指定了檔案流;返回值是從流中讀取的元素個數。

char list[30];

int numread;

numread = fread( list, sizeof( char ), 25, stream );

通過fwrite()函式實現檔案的寫入。該函式的格式為

size_t fwrite(const void* buff, size_t size, size_t count, file* stream)

其中,引數buff表示要寫入的資料,

size

表示向檔案流中寫入的單個元素的大小,單位是位元組;

count

表示最多向檔案流中寫入元素的數量;

stream

表示指定的檔案流;返回值表示向檔案流中實際寫入的元素數量。

int numwritten;

for ( i = 0; i < 25; i++ )

list[i] = (char)('z' - i);

numwritten = fwrite( list, sizeof( char ), 25, stream );

在對檔案流進行了讀寫操作後,如不再需要操作檔案流,則需要關閉該檔案流。通過fclose()函式進行關閉,該函式可以把緩衝區內最後剩餘的資料輸出到檔案中,並釋放檔案指標和有關的緩衝區。

fclose()

函式的格式為

int fclose(file *stream)

其中,stream即為要關閉的檔案流,如果成功關閉檔案流,則返回值是

0,否則返回

eof。

fclose(stream);

通過檔案流將輸入寫入檔案時,主要包含兩種寫入方式:文字方式寫入和二進位制方式寫入。

二進位制方式寫入檔案是把記憶體中的資料按其在記憶體中的儲存形式原樣儲存在檔案中;而文字方式寫入檔案是把記憶體中的資料轉化為字元,之後再儲存到檔案中。

在「2.3

寫入檔案」中提到到

fwrite()

函式使用的是二進位制方式寫入,

fprintf()

函式使用的是文字方式寫入。

fprintf()

函式的格式是

int fprintf(file *stream,  const char *format [,  argument ]... )

其中,引數stream是檔案流,

format

是指定格式的字串,

argument

是可選的引數。

對於二進位制方式寫入檔案時(呼叫fwrite()函式),寫入檔案中的資料所佔的空間是由

fwrite()

函式的第二個引數

count

決定的,如

int num = 10;

fwrite(&num, sizeof(int), 1, file);

此時,寫入num的值

10所佔的空間是

sizeof(int)

,也就是

4個位元組。而對於文字方式寫入檔案(呼叫

fprintf()

函式),

int num = 10;

fprintf(file, 「%d」, num);

此時,寫入num的值

10所佔的空間是

2個位元組。對於

fwrite()

函式,無論

num的值是10、

100、

1000

還是10000

,此時寫入的資料所佔的空間都是

4個位元組,而對於

fprintf()

,寫入10

時所佔的空間是

2個位元組,寫入

100時所佔的空間是

3個位元組,寫入

1000

時所佔的空間是

4個位元組,寫入

10000

時所佔的空間是

5個位元組。

也就是說,對於二進位制寫入方式,無論寫入的數值是大還是小,其所佔的空間是固定的(由fwrite()函式的第二個引數決定);對於文字寫入方式,寫入的數值越小,其所佔的空間越小,寫入的數值越大,所佔的空間越大。

利用檔案流讀寫檔案

掌握文字檔案讀寫的方法 了解二進位制檔案的讀寫方法 c 檔案流 fstream 檔案流 ifstream 輸入檔案流,用於讀檔案 從檔案中讀取資訊 ofstream 輸出檔案流,用於寫檔案 把資訊寫到檔案中 建立乙個文字檔案並寫入資訊 同向螢幕上輸出資訊一樣將資訊輸出至檔案 include incl...

讀寫檔案流

1.讀檔案流 1 char fgets char buf,n file fp 從檔案流讀1行 包括換行符 如果n大於一行檔案的字元數 到buf。從檔案中讀取至多n 1個字元 n用來指定字元數 並把它們放入buf指向的字串中,在讀入之後自動向字串未尾加乙個空字元,成功 返回buf指標,失敗或讀到檔案尾...

高效檔案流讀寫

filechannel,是記憶體與磁碟檔案的通道。優勢 io讀寫效能提高 os負責 也可引做共享記憶體,減少io操作,提公升併發性 應用crash,保證這部分內容還能寫的進去檔案。在我們呼叫channel.write bytebuffer 之後,具體何時寫入磁碟 bytebuffer中內容暫存於 o...