生活随笔
收集整理的這篇文章主要介紹了
有关fwrite语句的用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:函數名: fwrite
功?能:?寫內容到流中
用?法:fwrite(buffer,size,count,fp);
(1)buffer:是一個指針,對fwrite來說,是要輸出數據的地址。
(2)size:要寫入的字節數;
(3)count:要進行寫入size字節的數據項的個數;
(4)fp:目標文件指針。
程序例:
#include?<stdio.h>
struct mystruct
{
int i;
char ch;
};
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.ch?=?'A';
fwrite(&s,?sizeof(s),?1,?stream);?/* write struct s to file */
fclose(stream);?/* close file */
return 0;
} 與fprintf的區別
fprintf(fp, "%d", buffer);?是將格式化的數據寫入文件
fprintf(文件指針,格式字符串,輸出表列);?
fwrite(&buffer, sizeof(int), 1, fp);是以二進位位方式寫入文件
fwrite(數據,數據類型大小(字節數),寫入數據的最大數量,文件指針);?
由于fprintf寫入時,對于整數來說,一位占一個字節,比如1,占1個字節;10,占2個字節;100,占3個字節,10000,占5個字節
所以文件的大小會隨數據的大小而改變,對大數據空間占用很大。
而fwrite是按二進制寫入,所以寫入數據所占空間是根據數據類型來確定,比如int的大小為4個字節(一般32位下),那么整數10所占空間為4個字節,100、10000所占空間也是4個字節。所以二進制寫入比格式化寫入更省空間。
因此,
對于1 2 3 4 5 6 7 8 9 0?十個整數,用fprintf寫入時,占10個字節;而用fwrite寫入時,占40個字節。
對于100 101 102 103 104 105 106 107 108 109 110?這十個整數,用fprintf寫入時,占30個字節;而用fwrite寫入時,占40個字節。
對于10000 10100 10200 10300 10400 10500 10600 10700 10800 10900 11000?這十個整數,用fprintf寫入時,占50個字節;而用fwrite寫入時,還是占40個字節。
二:實例 可借鑒試讀過程??轉自:http://topic.csdn.net/t/20010530/11/139946.html
#include?<stdio.h>?
#include?<string.h>?
#include?<conio.h>?
FILE?*stream;//, *stream2;?
FILE?*stream2;?
void?main(void)?
{?
??int?numclosed;?
???char?*list;?
???list=?"這個程序由陽永紅編寫 ";?
????if((stream=?fopen("data.txt ","r "))==NULL)?//試圖打開文件data.txt,如果該文件不存在,則自動創建?
???????{?
??????????printf("試圖打開'data.txt '\n");?
??????????printf(" 'data.txt '不存在\n ");?
??????????printf(" 'data.txt '被創建\n ");?
????????}?
else?
?????printf(" 'data.txt '被打開\n ");?//以寫入方式打開
????if(?(stream2=fopen("data.txt ","w+ "))==NULL)?
?????printf(?" 'data.txt '不存在\n "?);?
????else?
????????{?
????????????printf(?" 'data.txt '成功被打開\n "?);?
??????????fwrite(list,strlen(list),30,stream2);?
??????????printf(?"寫入數據成功\n ");?
????????}?
if(stream!=NULL)?//如果data.txt存在就會打開成功,則stream!=NULL,這時就關閉stream?
if(fclose(stream))?
printf("文件流stream被關閉\n "?);?
numclosed=_fcloseall(?);?//關閉所有打開的文件流,返回關閉的文件流個數
printf("被關閉的文件流量: %u\n ",?numclosed?);?
_getch();?//按任意鍵后退出?
} =============================================================================
三:數據塊讀寫函數fread和fwite
#include?<stdio.h>
#include?<math.h>
#include?<stdlib.h>
#include?<conio.h>
#define?N 5
struct?student
{
char?name[20];
int?num;
int?age;
char?addr[15];
};
int?main()
{
/*數據塊讀寫函數fread和fwite
讀取數據塊函數調用的一般形式為
fread(buffer,size,count,fp)
寫數據塊函數調用的一般形式為
fwrite(buffer,size,count,fp)
其中:
buffer是一個指針,在fread函數中,它表示存入數據的首地址;
在fwrite函數中,它表示輸出數據的首地址
size表示數據塊的字節數
count表示要讀寫的數據塊的塊數
fp表示文件指針
fread(array,4,10,fp)
表示從fp所指的文件中,每次讀4個字節(一個實數)送入實數數組array中,
連續讀取10次,即讀10個實數到數組array中
從鍵盤輸入N個學生的數據,寫入一個文件中,再讀出這N個學生的數據顯示到屏幕上
*/
struct?student stua[N],stub[N],*pp=stua,*qq=stub;
FILE?*fp;
????int?i;
if((fp=fopen("c:\\happy.txt","w+"))==NULL)
{?
printf("Cannot open file,press any key exit!\n");
getch();
exit(1);
}
printf("Iput data \n");
for(i=0;i<N;i++,pp++)
{
printf("請輸入第%d位學生的數據:",i+1);
scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
}
pp=stua;
fwrite(pp,sizeof(struct?student),N,fp);//寫N個學生的記錄
rewind(fp);
fread(qq,sizeof(struct?student),N,fp);//讀N個學生的記錄
printf("\n\n name number age addr \n");
for(i=0;i<N;i++,qq++)
printf("%-10s%-6d%-5d%-15s\n",qq->name,qq->num,qq->age,qq->addr);
fclose(fp);
return?0;
}
總結
以上是生活随笔為你收集整理的有关fwrite语句的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。