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
二进制和文本模式之间的区别在较低级别。
如果您以文本模式打开文件,即使使用 read
和 write
操作,您也会得到翻译后的数据。
另请注意,只有当该位置是从先前的 tell
(或 0)获得的时,您才可以 seek
到文本文件中的某个位置。为了能够进行随机定位,文件必须以二进制模式打开。
这个问题是关于 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
二进制和文本模式之间的区别在较低级别。
如果您以文本模式打开文件,即使使用 read
和 write
操作,您也会得到翻译后的数据。
另请注意,只有当该位置是从先前的 tell
(或 0)获得的时,您才可以 seek
到文本文件中的某个位置。为了能够进行随机定位,文件必须以二进制模式打开。