【发布时间】:2020-07-16 15:06:40
【问题描述】:
读取文本文件(恰好是 PDS Member 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 返回的值。它没有被损坏。
相同的代码适用于文件中的其他位置,并且仅在记住该位置时剩下一个空行要读取的点处失败。
我对@987654330@/fseek 应该如何工作的理解被另一个answer on SO 简洁地捕捉到了。
从文本流上的 ftell 返回的值与您目前阅读的字符数没有可预测的关系。您唯一可以依赖的是,您可以随后将其用作 fseek 或 fseeko 的偏移量参数以移回相同的文件位置。
似乎我不能依赖我应该能够依赖的一件事。
我的问题是,为什么fseek 会以这种方式失败?
【问题讨论】:
-
试试
export _EDC_ZERO_RECLEN=Y。 -
有趣,我会试一试 - 有一个
'\n'被认为是零? -
再想一想,流打开是文本模式还是二进制模式?
-
@meat - 如问题中所述,它是一个文本文件,并以“r”打开。将更新问题文本以反映这一点。
-
@MilosLalovic - 我终于开始尝试您的建议,但没有任何区别。
标签: file-io mainframe zos fseek ftell