我在Windows下读取Linux文件时遇到了问题。以下是有关该问题的讨论: 在Unix下创建的文件在Windows上使用fstream::seekg。
通过指定std::ios_base::binary
来打开文本文件以解决此问题。
但是这种模式的实际意义是什么呢?如果指定,则仍然可以将文件视为文本文件(用mystream << "Hello World" << std::endl
写入并使用std::getline
读取)。
在Windows下,我注意到的唯一区别是,如果未指定std::ios_base::binary
,则mystream << "Hello World" << std::endl
会使用:
0x0D 0x0A
作为行分隔符(EOL和回车符)- 如果指定了
std::ios_base::binary
,则0x0A
作为行分隔符(EOL only)
Notepad在打开使用std::ios_base::binary
生成的文件时不会智能地显示行。像vi或Wordpad这样的编辑器确实会显示它们。
在使用和不使用std::ios_base::binary
生成的文件之间,真正的区别只有这个吗?文档说将流视为二进制而不是文本。
,这最终意味着什么?
如果我不关心在Notepad中打开文件并希望始终使用fstream::seekg
,那么始终设置std::ios_base::binary
是否安全?
\0
字符。在二进制中,它们可能只是输出,而对于非二进制,则可能被解释为字符串终止符。 - Gábor Bakos