文件指针移动到文件尾,但是feof(fid)却返回0!!
如题,我这样打开文件:fid= fopen(filename,'r'),之后fseek(fid,0,1)或者fseek(fid,0,'eof')这个时候 feof(fid)应该返回1 但是打开好多文件尝试,都是返回0,而且每次打开新文件之前
都用fclose all或者 fclose(fid)关闭了打开的文件,请各位指教!聚宝盆第八个宝贝没有涉及此问题 此时非常奇怪的现象是
fseek(fid,0,1),x1=ftell(fid); feof(fid)返回0
这时
fread(fid,1,'uchar')
x2 = ftell(fid); feof(fid)返回1,
但是 x1 == x2 返回1
这究竟是怎么回事!!!!!!!! 问题已经解决!谢谢!
回复 板凳 tiger1981 的帖子
请把如何解决问题的方法与大家共享一下,ok? 好的!我看大家都不理睬我的帖子,以为这个问题对于大家来说过于简单,大家都不屑一顾呢。是这样,fseek把文件指针挪到末尾,这个时候,文件指针仍然是有效的!所以feof(fid)返回0。这个时候你仍然可以用fread读它,只不过返回空,如果是'char'或者'uchar',返回' '。如果整型或者单双精度浮点数返回空数组[]。用fread读过之后,这个指针才真正到了文件尾。再深一些的理论我就讲不出来了!
我尝试了许多不同的文件,包括四种格式的binary文件(其中包括一个*.mat文件),也尝试了ASCII文件,都是这样。 在网上找到的一个关于feof的解释,和C standard有关。
FEOF follows the ANSI C standard that says it does not return true until you read past the end of the file
我的理解是feof实际上是判断fid有没有越过文件结束位。fseek(fid,0,'eof')只是把fid指向了文件结束位并没有越过,所以这个时候foef返回0.如果要feof返回1,就必须要在feof之前调用fread,fgetl之类的命令,让fid越过文件结束位一次。
判断文件是否读完还可以用这个方法,matlab里也提到了
while 1
tline = fgetl(fid);
if ~ischar(tline), break, end
disp(tline)
en
[ 本帖最后由 ydlcsu 于 2009-7-25 14:57 编辑 ]
页:
[1]