fread、fwrite的功能是从一个文件流中读取二进制对象的,因而需要以‘rb’或‘wb’方式打开文件,而不能是‘r’,否则可能造成读写取错误
测试代码如下:
#include <stdio.h>
#define BUFSIZE 1000000
int main()
{
char srcName[] = "src.rar";
char buf[BUFSIZE]={0};
FILE* src;
if((src=fopen(srcName, "r"))==NULL)
//if((src=fopen(srcName, "rb"))==NULL)
return -1;
fseek(src, 0, SEEK_SET);
int nread;
while(1)
{
printf("begin:\t%d\t", ftell(src));
nread=fread(buf,sizeof(char),BUFSIZE,src);
printf("end:\t%d\n", ftell(src));
if(nread<=0)break;
}
//关闭打开对象
fclose(src);
return 0;
}
若以fopen(srcName, "r")方式打开,运行结果如下,根据文件流指针可以看到文件读入出错:
而以fopen(srcName, "rb")方式打开,运行结果正确,如下: