fwrite

fwrite

fwrite是C語言函數,指向文件寫入一個數據塊。如成功執行則返回實際寫入的數據塊數目。該函數以二進位形式對文件進行操作,不局限於文本文件。

功能


C語言函數,向文件寫入一個數據塊。
把ptr所指向的數組中的數據寫入到給定流stream中。

用法


size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:這個函數以二進位形式對文件進行操作,不局限於文本文件。
返回值:返回實際寫入的數據塊數目。
fwrite
fwrite
(1)buffer:是一個指針,對fwrite來說,是要獲取數據的地址;
(2)size:要寫入內容的單位元組數;
(3)count:要進行寫入size位元組的數據項的個數;
(4)stream:目標文件指針;
(5)返回實際寫入的數據項個數count。
說明:寫入到文件的哪裡?這個與文件的打開模式有關,如果是w+,則是從file pointer指向的地址開始寫,替換掉之後的內容,文件的長度可以不變,stream的位置移動count個數;如果是a+,則從文件的末尾開始添加,文件長度加大。
fseek對此函數有作用,但是fwrite函數寫到用戶空間緩衝區,並未同步到文件中,所以修改後要將內存與文件同步可以用fflush(FILE *fp)函數同步。
程序示例
示例一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include struct mystruct{ int i; char cha;}; int main(void){ FILE *stream; struct mystruct s; if ((stream = fopen("TEST.$$$", "wb")) == NULL) { fprintf(stderr, "Cannot open output file.\n"); return 1; } s.i = 0; s.cha = 'A'; fwrite(&s, sizeof(s), 1, stream); fclose(stream); return 0;}
示例二:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include#define SIZE 1typedef struct{ char name[10]; int num; int age; char addr[15]; }student; student stu[SIZE]; void save(){ FILE *fp; int i; if((fp=fopen("dat.txt","w"))==NULL) { printf("無法打開此文件!\n"); return; } for(i=0;iscanf("%s%d%d%s",&stu[i].name,&stu[i].num,&stu[i].age,&stu[i].addr); save();}
示例三:
1
2
3
4
5
6
7
8
9
10
11
#include int main (){ FILE * pFile; char buffer[] = { 'x' , 'y' , 'z' }; pFile = fopen ( "myfile.bin" , "wb" ); fwrite (buffer , sizeof(buffer), 1 , pFile ); fclose (pFile); return 0;}
稱為myfile.bin的一個文件被創建並存儲到它的緩衝區的內容。為了簡單起見,該緩衝區包含Char元素,但它可以包含任何其他類型。
sizeof(buffer)位元組數組的長度(在這種情況下,它是三個,因為數組有三個元素,每次一個位元組)。
示例四:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//程序示例 fwrite fread fseek#include int main (){ FILE *fp; char msg[] = "file content"; char buf[20]; fp = fopen("d:\\a\\a.txt","w+"); if (NULL == fp) { printf("The file doesn't exist!\n"); return -1; } fwrite(msg,strlen(msg),1,fp);//把字元串內容寫入到文件 fseek(fp,0,SEEK_SET);//定位文件指針到文件開始位置 fread(buf,strlen(msg),1,fp);//把文件內容讀入到緩存 buf[strlen(msg)] = '\0';//刪除緩存內多餘的空間 printf("buf = %s\n",buf); printf("strlen(buf) = %d\n",strlen(buf)); return 0;}

函數原型


size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

返回值


如果成功,該函數返回一個 size_t 對象,表示元素的總數,該對象是一個整型數據類型。如果該數字與 nmemb 參數不同,則會顯示一個錯誤。

參數


● ptr-- 這是指向要被寫入的元素數組的指針。
● size-- 這是要被寫入的每個元素的大小,以位元組為單位。
● nmemb-- 這是元素的個數,每個元素的大小為 size 位元組。
● stream-- 這是指向 FILE 對象的指針,該 FILE 對象指定了一個輸出流。