这两者有什么区别?是不是in
标志对象的事情是多余的?谢谢。ios :: in是否需要在二进制模式下打开ifstream?
std::ifstream file1("one.bin", std::ifstream::in | std::ifstream::binary);
std::ifstream file2("two.bin", std::ifstream::binary);
这两者有什么区别?是不是in
标志对象的事情是多余的?谢谢。ios :: in是否需要在二进制模式下打开ifstream?
std::ifstream file1("one.bin", std::ifstream::in | std::ifstream::binary);
std::ifstream file2("two.bin", std::ifstream::binary);
从上ifstream
类的构造文档:
二进制(二进制)考虑流作为二进制而不是文本。
in(输入)允许在流上进行输入操作。
所以从文件中读取的时候,我会用std::ifstream::in
标志,不是因为它是必需的(或没有),而是因为这将是一个良好的编程习惯,让编程接口知道你要作什么用途。
编辑:
以下是从http://www.cplusplus.com/doc/tutorial/files/拍摄,约open()
成员函数虽然(但在问题的代码构造函数可能跟open()
复制模式标志不加修改)。
类:默认模式参数
ofstream的:IOS ::出
ifstream的:IOS ::在
的fstream:IOS ::在| IOS ::出对于ifstream的和ofstream的类,IOS ::在和IOS ::出自动和分别是 假定,即使不 一个模式包括它们作为第二个参数到打开传递()会员 功能。
尽管如此,Web上的很多示例在显示ifstream
对象的构造时使用ifstream::in
。真的可能是某种迷信的做法,而不是编程。
@ Naveen:我需要让'ifstream'知道我想用它作为_input_吗?我可以简单地使用'fstream' - 这就是为什么我首先发布了这个问题。 :) –
是的,好点:P在编辑中我已经变得柔软了。 –
伙计们,停止upvoting我的答案,因为它并没有真正给出太多的答案,只是表达了个人意见加上给'open()'成员函数一些间接相关的信息。但是,这并不意味着我希望它得到downvoted =) –
我不能在网上找到权威的文档。
编辑我什至不能找到一个适当的参考在我的副本Josuttis Book,第8次印刷。 它应该是在第13.9页627-631
经验证据表明它是多余的IFF没有的std :: IOS的::在或std :: IOS:出传递:
#include <fstream>
#include <iostream>
int main(int argc, char** args)
{
std::ifstream ifs(args[0], std::ios::binary);
std::cout << ifs.rdbuf() << std::flush;
return 0;
}
成功:
test | md5sum
md5sum test
显示相同的哈希总和。
// ...
std::ifstream ifs(args[0], std::ios::out | std::ios::binary);
将失败(零字节输出)
test | wc -c # shows 0
binary
,在这种情况下,仅指读写方法。在Windows的常规模式下,'\n'
被翻译为'\r''\n'
。这可能会影响读取和写入,所以二进制模式会将其关闭。 out|binary
与in|binary
erm ...从文档我不认为它是多余的;这是值得30秒...尝试:) – sehe
为什么它相关,如果它的二进制或不? – Dani