在我使用以下代码片段进行的实验中,我没有发现是否使用ios:binary模式创建流有任何特别的区别:
int main()
{
ifstream ostr("Main.cpp", ios::in | ios::binary | ios::ate);
if (ostr.is_open())
{
int size = ostr.tellg();
char * memBlock = new char[size + 1];
ostr.seekg(0, ios::beg);
ostr.read(memBlock, size);
memBlock[size] = '\0';
ofstream file("trip.cpp", ios::out | ios::binary);
file.write(memBlock, size);
ostr.close();
}
}这里,我试图将原始源文件复制到另一个具有不同名称的文件中。
我的问题是,当使用/不使用ios::binary模式打开fstream对象时,读/写调用(与二进制文件IO关联)之间有什么不同?使用二进制模式有什么好处吗?在执行文件IO时,何时使用它,何时不使用它?
发布于 2012-10-07 15:34:16
binary和text模式之间的唯一区别是如何处理'\n‘字符。
在binary模式下,没有和转换。
在text模式下,\n在写入时转换为end of line sequence。
在text模式下,end of line sequence在读取时转换为\n。
end of line sequence依赖于平台。
示例:
基于ASCII的系统:
LF ('\0x0A'): Multics, Mac OS X, BeOS, Amiga, RISC OS
CRLF ('\0x0D\0x0A'): Microsoft Windows, DEC TOPS-10, RT-11
CR: ('\0x0D'): TRS-80, Mac OS Pre X
RS: ('\0x1E'): QNX pre-POSIX implementation.发布于 2012-10-07 14:31:59
如果要以二进制格式编写文件,而不对数据进行任何修改,请指定ios::binary标志。当你想在文本模式下写文件时,不要指定ios::binary,你可能会得到像行尾翻译这样的东西。如果您使用的是类UNIX平台,则二进制和文本格式是相同的,因此您看不到任何区别。
https://stackoverflow.com/questions/12766636
复制相似问题