设置 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 为真。感谢大家的贡献。
所以我有这个 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 为真。感谢大家的贡献。