是否建议始终使用'binary'模式打开文件?
Is it recommended to always open file using 'binary' mode?
我有一个通用函数:
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
?
我已经阅读了一些相关帖子,找不到太多新东西。
除了换行转换,我找不到任何其他理由来喜欢文本模式。
顺便说一下,在 GNU C 库和所有 POSIX 系统上,文本流和二进制流之间没有区别。
有关 GCC 文档中如何解释这一点,请参阅此处。
我真的很想找到一些关于强调文本的例子。
由于二进制流总是比文本流更强大、更可预测,因此您可能想知道文本流的用途。为什么不简单地始终使用二进制流?答案是,在这些操作系统上,文本和二进制流使用不同的文件格式,而读取或写入可以与其他面向文本的程序一起使用的"普通文本文件"的唯一方法是通过文本流。
以文本形式打开将修改它认为的内容,即读取或写入文件时的行尾字符。对于纯文本文件,我会以文本形式打开。有两个优点。
-
该代码更易于移植到其他平台。
-
该代码与源自其他平台的文件更兼容。
因此,例如,您可能会看到对 CVS、XML 或 HTML 文件使用文本格式的好处,这些文件往往不包含原始二进制数据。
不幸的是,不能保证上述方法会起作用,但在大多数情况下它会有所帮助。
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- C++二进制模式下写入和读取文件
- C++将特定的数据模式从RFID阅读器写入文本文件
- glob只给出匹配模式的第一个文件
- 在 eclipse 中以发布模式构建后没有可执行文件
- 是否有标准的文件保存和交换模式
- 生成文件匹配规则和配方中的模式
- ios::app 和 ios::noreplace 模式在文件处理中有什么区别?
- C++文件可配置的编译时多态模式?
- QTextStream 无法使用开放模式写入文件,包括"t" QIODevice::Append
- Gettin 目标模式不包含来自未修改的生成文件的"%"?
- 为什么隐藏文件无法在 MFC 中的创建和写入模式下打开?
- 如何仅使用 std::filebuf 将数据(二进制模式)写入文件
- Visual Studio在发布模式下构建,但用户收到消息说他们需要调试文件
- 在此任务上遇到麻烦,我们需要使用指针和数组来找到文本文件中某些数字的平均值,中值和模式
- 奇怪的文本模式文件输出行为
- 从C++源代码中打开一个emacs组织模式文件,并自动创建一个项目
- 从*自动生成objective-c类.XSD模式文件