设置 EOF 标志后,无法让 fstream 返回 0

Can't get fstream to seekg back to 0 after EOF flag set

所以我有这个 fstream,我正在从我的文件中读取它,并且在设置 EOF 标志后尝试从我的文件中读取时遇到了这个疯狂的错误(或者至少我认为是这样)正在发生)。

这是我的问题范围:

if (!reader.good())
        {
            reader.clear();
            reader.seekg(0, ios::beg);
        }
int test = reader.tellg();
reader.seekg((index / 10) * 10 * sizeof(TrieNode));
test = reader.tellg();
reader.read((char*)TrieBuff, 10 * sizeof(TrieNode));
test = reader.tellg();

我已经添加了整数 'test',这样我就可以跟踪流在调试器中的每一步的位置。现在我在调试器中看到的是,即使程序进入 'if' 并清除 fstream,之后测试仍然等于 -1!然后没有任何内容被读入 TrieBuff。我不知道在这里做什么。

这是相关的整个函数:

// Takes an fstream opened at the doc's trie file. Returns the node at the 
    // index specified, using the TrieBuff. (The index is the node's serial number.)
    TrieNode get_node_at_index(fstream& reader, int index)
    {
        if (TrieBuff[0].data.nodeserialnr == -1 ||
            index > TrieBuff[9].data.nodeserialnr || index < TrieBuff[0].data.nodeserialnr)
        {
            if (!reader.good())
            {
                reader.clear();
                reader.seekg(0, ios::beg);
            }
            int test = reader.tellg();
            reader.seekg((index / 10) * 10 * sizeof(TrieNode));
            test = reader.tellg();
            reader.read((char*)TrieBuff, 10 * sizeof(TrieNode));
            test = reader.tellg();
            int x = 0;
        }
        return TrieBuff[index % 10];
    }

我无法理解 (index / 10) * 10 * sizeof(TrieNode) 的用法。如果它是有目的的使用,那么请检查它对于不能被 10 整除的 index 是否被评估为 0。因为 index / 10 是一个整数除法。我猜是因为读指针没有向前移动。

所以答案是,正如一些人建议的那样,fstream 没有正确打开。我没有意识到即使未打开流,stream.good() 也会 return 为真。感谢大家的贡献。