fwrite() 是 C 語言標準庫中的一個檔案處理函式,功能是向指定的檔案中寫入若干數據塊,如成功執行則返回實際寫入的數據塊數目。該函式以二進制形式對檔案進行操作,不局限於文本檔案。
基本介紹
- 中文名:寫數據函式
- 外文名:fwrite
- 類別:程式語言函式
- 特點:c語言
- 頭檔案:stdio.h
功能,用法,程式示例,
功能
C語言函式,向檔案寫入一個數據塊
用法
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;}