EOF标志设置

时间:2015-06-11 09:15:51

标签: c++ iostream fstream eof trie

所以我从我的文件中读取了这个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];
    }

3 个答案:

答案 0 :(得分:1)

我无法理解(index / 10) * 10 * sizeof(TrieNode)的用法。它是有目的地使用,然后请检查它将被评估为0 index,它不能被10整除。因为index / 10是一个整数除法。我想由于读指针不向前移动。

答案 1 :(得分:0)

我的理解是reader.seekg(0, ios::beg);应为reader.seekg(0, reader.beg);

答案 2 :(得分:0)

所以答案是,正如一些人所说,fstream没有正确打开。我还没有意识到,即使没有打开流,stream.good()也会返回true。谢谢大家的贡献。