我有一个通用功能:
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
?
答案 0 :(得分:0)
我看了一些相关的帖子,找不到太多新东西 除换行转换外,我找不到任何其他理由来选择文字模式 顺便说一句,在GNU C库和所有POSIX系统中,文本流和二进制流之间没有区别。
请参阅here了解GCC文档中如何解释这一点。
我真的想找一些关于强调文本的例子。
由于二进制流总是比文本流更强大,更可预测,因此您可能想知道文本流的用途是什么。为什么不简单地总是使用二进制流? 答案是,在这些操作系统上,文本和二进制流使用不同的文件格式,读取或写入可与其他面向文本的程序一起使用的“普通文本文件”的唯一方法是通过文本流强>
答案 1 :(得分:0)
在阅读或写入文件时,以文本形式打开将修改其认为的行尾字符。对于纯文本文件,我将以文本形式打开。有两个好处。
代码与源自其他平台的文件更兼容。
因此,例如,您可能会看到使用文本格式对CVS,XML或HTML文件的好处,这些文件往往不包含原始二进制数据。
不幸的是,它不能保证上述功能可行,但在大多数情况下它会有所帮助。