任何想法为什么以下将失败?
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”。 请发布一个类似的简短的测试,说明你的代码失败。