这可能恰好属于Stack Exchange的不同部分,但我不这么认为 - programmers.se更多的是关于其他事情。
回答问题:你可以用std :: ios :: binary做一些你不能在文本模式下做的事情(例如相对搜索)但是我找不到任何在文本模式下你无法做到的二进制文件模式 - 甚至将文件作为文本读取,例如的std ::函数getline()
那我为什么要打开文字呢?作为一个可能相关的问题,为什么不默认打开二进制?那个用例会破坏吗?
编辑其他信息
这是让我问的原因:
我有一个在Windows系统上创建的文件 - 也就是说,行结尾是CR LF。
我使用std::ifstream
标记
std::ios::binary
我使用std::getline
解析文件并获得我期望的行为 - getline一次读取一行。
系统:Windows 7 Pro
编译器:用于MINGW32的g ++
答案 0 :(得分:7)
在文本模式下,你不能用二进制文件做什么?读
文字,对于初学者。文件模式下自动打开的文件
在内部'\n'
字符之间进行翻译
系统用于在外部分隔文件中的行。它可以
也识别文件的任意结束,即使是
底层系统要求文件大小是某些文件的倍数
固定大小。
今天的选择有点复杂,因为你 通常必须从不兼容的系统访问文件。如果 你有一个安装在Windows和Unix上的文件系统,写 它作为Windows下的文本,然后在Unix下将其作为文本读取 你会看到额外的角色。在这种情况下,它可能是 最好是读写二进制文件,并做行结束 根据您喜欢的任何惯例处理自己。 同样,如果“文件”实际上是一个套接字,则进行通信 与另一台机器,你会想要以二进制打开它,和 根据要求自己处理线路结束 协议。
答案 1 :(得分:2)
默认情况下,stdin在文本模式下打开,这允许使用例如CTRL + Z来表示EOF,所以我不明白为什么你认为没有“需要”在除二进制模式之外的任何流中打开流