【发布时间】:2016-04-11 00:11:07
【问题描述】:
在二进制模式下使用格式化的 IO 操作有什么问题,尤其是当我只处理文本文件时?
(1):
对于二进制文件,使用提取和插入运算符(>)以及 getline 之类的函数读取和写入数据效率不高,因为我们不需要格式化任何数据,而且数据很可能没有按行格式化。
(2):
通常,对于二进制文件 i/o,您不使用传统的面向文本的 > 运算符!它可以做到,但这是一个高级主题。
“高级主题”的性质让我质疑将这两者混合在一起。有一个 mingw bug 带有 seek 和 tell 功能,可以通过以二进制模式打开来解决。与文本模式相比,在二进制模式下使用 > 是否有任何问题,或者如果以二进制打开,我必须始终使用未格式化的 IO? As far as I can tell for text files,我只需要考虑回车符 (\r),这些回车符 (\r) 并没有为我隐式删除/添加,但这就是所有需要考虑的吗?
【问题讨论】:
-
文件的二进制模式意味着在读取或写入文件时不会发生翻译 (
ios::binary)。一种常见的翻译是行尾。这与使用istream::read和ostream::write直接读写无格式数据不同。