是否建议始终使用'二进制'模式?

时间:2015-06-22 06:40:08

标签: c++ c++11 ofstream

我有一个通用功能:

bool WriteFile(const string& strFileContent, const wpath& pathFile)

在这个函数中,我有以下几行:

std::ofstream outStream(pathFile.string().c_str(), std::ios::out);

由于此函数是通用的,我有时会用它来编写二进制文件。我注意到使用openmode std::ios::out对于二进制数据来说不是正确的,并且写入的文件不是我预期的,这意味着文件不等于strFileContent中定义的实际数据。

所以我做了这个简单的修复:

std::ofstream outStream(pathFile.string().c_str(), std::ios::out | std::ios::binary);

这解决了二进制文件的问题,也适用于文本文件

问题

如果打开模式std::ios::out | std::ios::binary适用于二进制和文本数据,那么其中一个是多余的吗?
如果是这样,我应该始终使用std::ios::out | std::ios::binary吗? 如果不是,在哪种情况下不建议使用std::ios::out | std::ios::binary

2 个答案:

答案 0 :(得分:0)

我看了一些相关的帖子,找不到太多新东西 除换行转换外,我找不到任何其他理由来选择文字模式 顺便说一句,在GNU C库和所有POSIX系统中,文本流和二进制流之间没有区别。

请参阅here了解GCC文档中如何解释这一点。

我真的想找一些关于强调文本的例子。

  

由于二进制流总是比文本流更强大,更可预测,因此您可能想知道文本流的用途是什么。为什么不简单地总是使用二进制流? 答案是,在这些操作系统上,文本和二进制流使用不同的文件格式,读取或写入可与其他面向文本的程序一起使用的“普通文本文件”的唯一方法是通过文本流

答案 1 :(得分:0)

在阅读或写入文件时,以文本形式打开将修改其认为的行尾字符。对于纯文本文件,我将以文本形式打开。有两个好处。

  • 代码更易于移植到其他平台。
  • 代码与源自其他平台的文件更兼容。

    因此,例如,您可能会看到使用文本格式对CVS,XML或HTML文件的好处,这些文件往往不包含原始二进制数据。

不幸的是,它不能保证上述功能可行,但在大多数情况下它会有所帮助。