C++ ifstream、ofstream:原始 read()/write() 调用和以二进制模式打开文件有什么区别?

C++ ifstream, ofstream: What's the difference between raw read()/write() calls and opening file in binary mode?

这个问题是关于 ifstream 和 ofstream 在读取和写入数据到文件时的行为。

通过阅读 whosebug.com 我设法发现 operator<<(流插入运算符)在输出之前将双打等对象转换为文本表示,并调用 read()write() 分别读取和写入存储在内存中的原始数据(二进制格式)。编辑:这很明显,这里没有什么意外。

我还发现以二进​​制模式打开文件会阻止根据不同操作系统的要求自动转换换行符。

所以我的问题是:这个自动翻译,例如;从 \n\r\n 发生在调用函数 read()write() 时?或者此行为仅特定于 operator<<。 (还有 operator>>。)

请注意,这里有一个类似但不太具体的问题。它没有给出明确的答案。 Difference in using read/write when stream is opened with/without ios::binary mode

二进制和文本模式之间的区别在较低级别。

如果您以文本模式打开文件,即使使用 readwrite 操作,您也会得到翻译后的数据。

另请注意,只有当该位置是从先前的 tell(或 0)获得的时,您才可以 seek 到文本文件中的某个位置。为了能够进行随机定位,文件必须以二进制模式打开。