我需要返回我在某个事件后阅读的文件中的先前位置。该文件以文本读取模式打开。所以我在阅读所需的段之前得到了文件的读取位置,然后我调用ftell将我返回到该位置。问题是它没有进入我指定的位置,而是向前跳了两个位置。
要使用此简化功能获取当前位置。 我不确定fflush是否必要,但似乎没有结果。
long GetCurPos(void)
{
return ftell(file);
}
要打开文件我只需使用
void Open(void)
{
file = fopen(path, "r");
}
要使用此简化功能返回上一个位置。 它返回零值。
void SetPos(long pos) const
{
if (fseek(file, pos, SEEK_SET)) LOG("ferror %d occured!", ferror(file));
}
最后是导致问题的功能
bool TryPeekWord(char * value, size_t maxLen) const
{
bool result = false;
long start = GetCurPos();
int c;
size_t len;
for (len = 0; len < maxLen; len++)
{
c = fgetc(file);
if (c == EOF)
{
*(value + len) = '\0';
result = len > 0;
break;
}
if ((c == ' ' || c == '\n') && len > 0)
{
*(value + len) = '\0';
result = true;
break;
}
*(value + len) = static_cast<char>(c);
}
SetPos(start);
return result;
}
如果我在SetPos调用后再次调用fseek,它将与start相同,但如果我从文件中读取它将不会返回预期的字符。我做错了什么?
答案 0 :(得分:0)
在将问题提高到适当标准的过程中,我发现我正在处理的文件已损坏。也许从移动到不同的操作系统或什么? 我将旧文件的内容复制到一个新文件中,它再次正常工作。