fopen裏的wb和w的區別即fwrite的返回值與實際文件大小不一致的問題

今天在做項目的時候,進行了文件操作。先打開一個文件,從中讀取出 uiFileLen 個字節的文件,然後將其寫入一個新文件。代碼如下

uint  uiFileLen  =  0x1000;


FILE * fp1 = fopen("d:\\abc.tar.gz","rb");


uchar *ucBuf=(uchar *)malloc(uiFileLen);


if(uiFileLen!= fread(ucBuf,sizeof(char),uiFileLen,fp1))  return;


FILE * fp2 =fopen("d:\\data.tar.gz","w");


uint  uiWrittenNum  = fwrite(ucbuf,sizeof(char),uiFileLen,fp2);


if(uiWrittenNum!=uiFileLen) return;


fclose(fp1);


fclose(fp2);


以上代碼的功能就是從d:\\abc.tar.gz中讀取uiFileLen個字節,然後寫到”d:\\data.tar.gz"文件裏。上面的代碼運行正確,沒有出錯。但是生成的“d:\data.tar.gz”文件的大小卻比uiFileLen的小。


後來查了一些資料,原來是打開方式的問題。資料地址:http://www.xuebuyuan.com/2039055.html


將上面代碼中的FILE * fp2 =fopen("d:\\data.tar.gz","w");改爲FILE * fp2 =fopen("d:\\data.tar.gz","wb");,以二進制模式打開,得出的文件大小就與uiFileLen一致了。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章