牛骨文教育服务平台(让学习变的简单)
博文笔记

fopen里的wb和w的区别即fwrite的返回值与实际文件大小不一致的问题

创建时间:2016-01-05 投稿人: 浏览次数:2004

今天在做项目的时候,进行了文件操作。先打开一个文件,从中读取出 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一致了。




声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。