fwrite() 是 C 語言標準庫中的一個檔案處理函式,功能是向指定的檔案中寫入若干數據塊,如成功執行則返回實際寫入的數據塊數目。該函式以二進制形式對檔案進行操作,不局限於文本檔案。
基本介紹
- 中文名:fwrite
- 外文名:fwrite
- 類別:程式語言函式
- 套用:C語言
- 頭檔案:stdio.h
- 功能:讀取數據
fwrite函式語法,函式原型,參數,功能,返回值,用法,程式示例,
fwrite函式語法
函式原型
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
參數
- ptr-- 這是指向要被寫入的元素數組的指針。
- size-- 這是要被寫入的每個元素的大小,以位元組為單位。
- nmemb-- 這是元素的個數,每個元素的大小為 size 位元組。
- stream-- 這是指向 FILE 對象的指針,該 FILE 對象指定了一個輸出流。
功能
把ptr所指向的數組中的數據寫入到給定流stream中。
返回值
如果成功,該函式返回一個 size_t 對象,表示元素的總數,該對象是一個整型數據類型。如果該數字與 nmemb 參數不同,則會顯示一個錯誤。
用法
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
返回值:返回實際寫入的數據塊數目
(1)buffer:是一個指針,對fwrite來說,是要獲取數據的地址;
(2)size:要寫入內容的單位元組數;
(3)count:要進行寫入size位元組的數據項的個數;
(4)stream:目標檔案指針;
(5)返回實際寫入的數據項個數count。
說明:寫入到檔案的哪裡? 這個與檔案的打開模式有關,如果是w+,則是從file pointer指向的地址開始寫,替換掉之後的內容,檔案的長度可以不變,stream的位置移動count個數;如果是a+,則從檔案的末尾開始添加,檔案長度加大。
fseek對此函式有作用,但是fwrite函式寫到用戶空間緩衝區,並未同步到檔案中,所以修改後要將記憶體與檔案同步可以用fflush(FILE *fp)函式同步。
程式示例
示例一:
#include <stdio.h>struct mystruct{ int i; char cha;};int main(void){ FILE *stream; struct mystruct s; if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */ { fprintf(stderr, "Cannot open output file.\n"); return 1; } s.i = 0; s.cha = 'A'; fwrite(&s, sizeof(s), 1, stream); /* 寫的struct檔案*/ fclose(stream); /*關閉檔案*/ return 0;}
示例二:
#include<stdio.h>#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;i<SIZE;i++) if(fwrite(&stu[i], sizeof(student), 1, fp) != 1) printf("檔案寫入錯誤。!\n"); fclose(fp);}void main(){ int i; for(i=0;i<SIZE;i++) scanf("%s%d%d%s",&stu[i].name,&stu[i].num,&stu[i].age,&stu[i].addr); save();}
示例三:
/* fwrite example : write buffer */#include <stdio.h>int main (){ FILE * pFile; char buffer[] = { 'x' , 'y' , 'z' }; pFile = fopen ( "myfile.bin" , "wb" ); fwrite (buffer , sizeof(char), sizeof(buffer) , pFile ); fclose (pFile); return 0;}
稱為myfile.bin的一個檔案被創建並存儲到它的緩衝區的內容。為了簡單起見,該緩衝區包含Char元素,但它可以包含任何其他類型。.
sizeof(buffer)位元組數組的長度(在這種情況下,它是三個,因為數組有三個元素,每次一個位元組)。
示例四:
//程式示例 fwrite fread fseek#include <stdio.h>#include <string.h>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;}