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")方式打開,運行結果正確,如下: