C語言以資料塊的形式讀寫檔案

2021-08-29 08:03:42 字數 2860 閱讀 2599

fgets()

有侷限性,每次最多只能從檔案中讀取一行內容,因為

fgets

遇到換行符就結束讀取。如果希望讀取多行內容,需要使用

fread

函式;相應地寫入函式為

fwrite。

fread()

函式用來從指定檔案中讀取塊資料。所謂塊資料,也就是若干個位元組的資料,可以是乙個字元,可以是乙個字串,可以是多行資料,並沒有什麼限制。

fread()

的原型為:

size_t fread ( void *ptr, size_t size, size_t count, file *fp );

fwrite()

函式用來向檔案中寫入塊資料,它的原型為:

size_t fwrite ( void * ptr, size_t size, size_t count, file *fp );

對引數的說明:

ptr

為記憶體區塊的指標,它可以是陣列、變數、結構體等。

fread() 

中的ptr

用來存放讀取到的資料,

fwrite() 

中的ptr

用來存放要寫入的資料。

size

:表示每個資料塊的位元組數。

count

:表示要讀寫的資料塊的塊數。

fp:表示檔案指標。

理論上,每次讀寫

size*count

個位元組的資料。

size_t

是在stddef.h

標頭檔案中使用

typedef

定義的資料型別,表示無符號整數,也即非負數,常用來表示數量。

返回值:返回成功讀寫的塊數,也即

count

。如果返回值小於

count:

對於fwrite()

來說,肯定發生了寫入錯誤,可以用

ferror()

函式檢測。 對於

fread()

來說,可能讀到了檔案末尾,可能發生了錯誤,可以用

ferror()

或feof()

檢測。

【示例】從鍵盤輸入乙個陣列,將陣列寫入檔案再讀取出來。

#include

#define n 5

int main() //

從鍵盤輸入資料

並儲存到陣列a

for(i=0; i

scanf("%d", &a[i]); }

//將陣列a

的內容寫入到檔案

fwrite(a, size, n, fp); //

將檔案中的位置指標重新定位到檔案開頭

rewind(fp); //

從檔案讀取內容並儲存到陣列b

fread(b, size, n, fp); //

在螢幕上顯示陣列

b的內容

for(i=0; i

printf("%d ", b[i]); }

printf("\n");

fclose(fp);

return 0; }

執行結果:

23 409 500 100 222↙

23 409 500 100 222

fwrite()/fread()

函式直接操作位元組,建議使用二進位制方式開啟檔案。 開啟

d:\\demo.txt

,發現檔案內容根本無法閱讀。這是因為我們使用

"rb+"

方式開啟檔案,資料以二進位制形式寫入檔案,一般無法閱讀。

資料寫入完畢後,位置指標在檔案的末尾,要想讀取資料,必須將檔案指標移動到檔案開頭,這就是

rewind(fp);

的作用。更多關於

rewind

函式的內容:c語言

rewind函式。

檔案的字尾不一定是

.txt

,它可以是任意的,你可以自己命名,例如

demo.ddd

、demo.doc

、demo.diy 等。

【示例】從鍵盤輸入兩個學生資料,寫入乙個檔案中,再讀出這兩個學生的資料顯示在螢幕上。

#include

#define n 2

struct stuboya[n], boyb[n], *pa, *pb;

int main() //

從鍵盤輸入資料

printf("input data:\n");

for(i=0; i

scanf("%s %d %d %f",pa->name, &pa->num,&pa->age, &pa->score); }

//將陣列boya

的資料寫入檔案

fwrite(boya, sizeof(struct stu), n, fp); //

將檔案指標重置到檔案開頭

rewind(fp); //

從檔案讀取資料並儲存到資料

boyb

fread(boyb, sizeof(struct stu), n, fp); //

輸出陣列

boyb

中的資料

for(i=0; i

printf("%s  %d  %d  %f\n", pb->name, pb->num, pb->age, pb->score); }

fclose(fp);

return 0; }

執行結果:

input data:

tom 2 15 90.5↙

hua 1 14 99↙

tom  2  15  90.500000

hua  1  14  99.000000

c語言以資料塊的形式對檔案資料進行操作

fgets 有侷限性,每次最多只能從檔案中讀取一行內容,因為 fgets 遇到換行符就結束讀取。如果希望讀取多行內容,需要使用 fread 函式 相應地寫入函式為 fwrite。fread 函式用來從指定檔案中讀取塊資料。所謂塊資料,也就是若干個位元組的資料,可以是乙個字元,可以是乙個字串,可以是多...

C語言檔案的讀寫

1.讀寫乙個字元的函式 函式名 fputc 呼叫形式 fputc ch,fp 功能 把字串ch寫到檔案指標變數fp所指向的檔案中 2.使用檔案的方式 r 唯讀 為輸入檔案開啟乙個已存在的ascii檔案 w 只寫,為輸入開啟乙個ascii檔案 a 追加,向ascii檔案尾新增資料 include in...

C語言檔案的讀寫

對檔案的讀和寫是最常見的檔案操作,在c語言中提供了多種檔案讀寫的函式 1.字元讀寫函式 fgetc 和 fputc 2.字串讀寫函式 fgets 和 fputs 3.字元塊讀寫函式 fread 和 fwrite 4.格式化讀寫函式 fscanf 和 fprintf 字元讀寫函式是以字元為單位的讀寫函...