【发布时间】:2011-09-02 18:46:36
【问题描述】:
我在一个程序中使用了这个 sn-p(在 Visual Studio 2005 中):
if(_eof(fp->_file))
{
break;
}
当达到 eof 时,它打破了封闭循环。但是该程序无法解析文件中的最后几千个字符。所以,为了找出发生了什么,我这样做了:
if(_eof(fp->_file))
{
cout<<ftell(fp)<<endl;
break;
}
现在我从 ftell 得到的答案与实际文件大小不同(而且更小)(这不是预期的)。我认为Windows可能对文件有问题,然后我这样做了:
if(_eof(fp->_file))
{
cout<<ftell(fp)<<endl;
fseek(fp, 0 , SEEK_END);
cout<<ftell(fp)<<endl;
break;
}
好吧,fseek() 给出了正确的答案(等于文件大小),而最初的 ftell() 失败了(如前所述)。
知道这里可能出了什么问题吗?
编辑:文件以“rb”模式打开。
【问题讨论】:
-
这是二进制文件还是文本文件?您是否以正确的模式(二进制或文本)打开它?
-
以二进制方式打开...
-
在你最喜欢的十六进制编辑器中打开文件,转到那个字节,看看里面有什么。然后你就会得到答案。
-
@Tomalak 这件事发生位置的最后一个字节是8C,下一个字节是ED。这对你有什么启示?
-
没关系;路德是正确的。
标签: c++ visual-studio file-io