所以我从我的文件中读取了这个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];
}
答案 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。谢谢大家的贡献。