我正在处理打开文件(二进制)的一些(遗留)代码,并从中读取一堆整数,浮点数,双精度数和字符数。一些相关的代码:
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
- 保护对此文件的访问权限,没有任何区别。我完全不知道如何做到这一点,所以如果有人知道这实际上是多么可能那将是一个很大的帮助。
答案 0 :(得分:0)
我意外地发现了它,在我看到的代码中完全不相关的部分:
_flushall();
删除这些调用(不知道为什么他们在那里)解决了这个问题。