【发布时间】:2015-08-26 21:30:45
【问题描述】:
所以我有这个从我的文件中读取的 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();
我添加了整数“测试”,这样我就可以在调试器中跟踪流在每个步骤中的位置。现在我在调试器中看到的是,即使程序进入'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];
}
【问题讨论】:
-
你是用文本模式还是二进制模式打开文件?
-
@ScottSteinbach 请将
std::cout << (reader.is_open() ? "open\n" : "closed\n");行添加为get_node_at_index的第一行,并在您发现int test = reader.tellg();设置test== -1 之前告诉我们它打印的内容。跨度>
标签: c++ iostream fstream eof trie