fstream >> int失败?

任何想法为什么以下将失败?

  std :: fstream i(L“C:/testlog.txt”,std :: ios :: binary | std :: ios :: in);
 int test = 0;
我>>testing; 

失败()返回true。 该文件存在并打开。

我检查了i._Filebuffer._Myfile._ptr,它是指向该文件的缓冲区的指针,所以我不明白为什么它失败。

您正在以二进制模式打开文件。 提取操作符是为了与文本文件一起使用。 只需省略std::ios::binary标志以文本模式打开文件即可。

如果你确实有一个二进制文件,改用read()函数。

编辑 :我也测试了它,而且确实似乎工作。 我从CPlusPlus.com得到这个,它说:

在二进制文件中,使用提取和插入运算符(<<和>>)和getline等函数来输入和输出数据效率不高,因为我们不需要格式化任何数据,并且数据可能不使用分离代码文本文件分离元素(如空间,换行符等)。

再加上ios::binary的描述,它简单地描述了“将流视为二进制而不是文本”,现在我完全搞不清楚了。 这个答案正在变成一个自己的问题…

下列:

 #include <fstream> #include <iostream> using namespace std int main() { std::fstream i("int.dat" , std::ios::binary | std::ios::in); int test = 0; if ( i >> test ) { cout << "ok" << endl; } } 

给出包含字符“123”的文件时打印“ok”。 请发布一个类似的简短的测试,说明你的代码失败。