意外的ifstream行为

时间:2015-10-15 14:59:35

标签: c++ windows ifstream

我正在处理打开文件(二进制)的一些(遗留)代码,并从中读取一堆整数,浮点数,双精度数和字符数。一些相关的代码:

std::ifstream infoFile(path.c_str(), std::ios_base::binary);

while (infoFile.good()){
  infoFile.peek();
  if (infoFile.eof())
    break;

  // Read all kinds of things
}

上述内容在同一个文件中被调用了很多次(在我的测试中为2 * 86次),可能是并行的。这是大型代码库中的一小段代码,提取独立代码非常困难。

在无法预测的文件读取次数之后,流的位置会发生无法预测的变化。我在上面的代码中调用tellg之前和之后打印了peek,并且在极少数情况下它已经改变了!我尝试mutex - 保护对此文件的访问权限,没有任何区别。我完全不知道如何做到这一点,所以如果有人知道这实际上是多么可能那将是一个很大的帮助。

1 个答案:

答案 0 :(得分:0)

我意外地发现了它,在我看到的代码中完全不相关的部分:

_flushall();

删除这些调用(不知道为什么他们在那里)解决了这个问题。