文件读取问题,咨询
我用fopen,fread读取一个文件,这个文件长度为15xx字节,但是我读出来只有149x字节,少了50字节左右,是什么原因呢?
我用的是类似这样的代码
file=fopen("x.txt","r");
if (file)
{
size=fread(temp,1,1549,file);//这里读出来,size返回就只有1494字节
...
fclose(file);
}
问题点数:50、回复次数:5Top
1 楼Jim_King_2000()回复于 2006-07-03 13:22:09 得分 5
如果是文本文件,为什么不用fgets之类的函数?
fread的返回值小于指定值是有可能的,参考msdn:
fread returns the number of full items actually read, which may be less than count if an error occurs or if the end of the file is encountered before reaching count. Use the feof or ferror function to distinguish a read error from an end-of-file condition.Top
2 楼UPCC(杂食动物)回复于 2006-07-03 14:01:45 得分 5
size=fread(temp,1549,1,file);你使用这种方式。
或者你先
fssek(file,0,SEEK_END);
int i = ftell(file);
看看这时的i是多长,
还有存在的大小不一定是文件的大小。Top
3 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-03 14:57:03 得分 30
1 有必要检查你的文件的长度;
2 文件打开方式 为文本,但是读取时候是 fread,
该方法一般应当使用 b(2进制)方式打开的文件; //估计这个是主要的原因!
3 文件读取的时候 if (file) 这样的语句可能不是很安全。
修改:
char ch;
file=fopen("x.txt","r");
ch = fgetc(file);
while(ch != EOF)
{
...
ch = fgetc(file);
}
fclose(file);Top
4 楼zidane_yubo(天涯独尊)回复于 2006-07-03 17:19:01 得分 10
用二进制的方式打开Top
5 楼CandCplus()回复于 2006-07-03 17:58:42 得分 0
我找到了原因,这个文件每行的结束是\r\n,但是读入之后是\n!
所以若干行读入之后,就少了几个字符,很有意思。打开方式修改成“rb”之后就正确了
----------------------------
3 文件读取的时候 if (file) 这样的语句可能不是很安全。
老兄,我还不明白为什么不安全。不过我以后写代码的时候会小心的。Top




