读取文本文件(恰好是 PDS 成员 FB 80)
hFile = fopen(filename,"r");
并且已经到达文件中只剩下一个空行的位置。
FilePos = ftell(hFile);
然后读取最后一行,它只包含一个'\n'
字符。
fseek(hFile, FilePos, SEEK_SET);
失败: -
errno=(27) EDC5027I The position specified to fseek() was invalid.
指定的位置fseek()
由ftell()
几行之前返回。在我看到的特定错误情况下,它的值为 841。通过调试器检查,这也是ftell
前面几行返回的值。它没有被损坏。
相同的代码适用于文件中的其他位置,并且仅在记住该位置时剩下一个空行要读取的点处失败。
我对 SO的另一个答案简洁地理解了我对如何ftell
/应该工作的理解。fseek
从文本流上的 ftell 返回的值与您目前已阅读的字符数没有可预测的关系。您唯一可以依赖的是,您可以随后将其用作 fseek 或 fseeko 的偏移参数以移回相同的文件位置。
似乎我不能依赖我应该能够依赖的一件事。
我的问题是,为什么fseek
会以这种方式失败?