遇到的fread的問題

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




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