读取一个文本文件(该文件恰好是 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
会以这种方式失败?
export _EDC_ZERO_RECLEN=Y
。 - Milos Lalovic'\n'
被认为是零吗? - Morag Hughson