C++ fseek 没有设置到相同的位置

C++ fseek doesn't set to same position

我需要 return 到某个事件后我正在阅读的文件中的上一个位置。文件以文本读取模式打开。所以我在读取所需的段之前获得文件的读取位置,然后我调用 ftell 到 return 我到那个位置。问题是它没有到​​我指定的位置,而是向前跳了两个地方。

为了获得当前位置,我使用了这个简化的函数。 我不确定 fflush 是否有必要,但它似乎对结果没有影响。

long GetCurPos(void)
{
    return ftell(file);
}

打开文件我只是使用

void Open(void)
{
    file = fopen(path, "r");
}

到 return 到以前的位置我正在使用这个简化的功能。 它 return 一个零值。

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) = '[=13=]';
            result = len > 0;
            break;
        }
        if ((c == ' ' || c == '\n') && len > 0)
        {
            *(value + len) = '[=13=]';
            result = true;
            break;
        }
        *(value + len) = static_cast<char>(c);
    }

    SetPos(start);
    return result;
}

如果我在 SetPos 调用后再次调用 fseek,它将与 start 的值相同,但如果我随后从文件中读取,它将不会 return 预期的字符。我做错了什么?

在将我的问题改进到适当标准的过程中,我发现我正在处理的文件已损坏。也许是从迁移到不同的操作系统之类的? 我将旧文件的内容复制到一个新文件中,它再次运行良好。