fwrite

fwrite

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;}

相關詞條

熱門詞條

聯絡我們