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一致了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值