首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在有/无ios::binary模式下打开流时使用读/写的区别

在有/无ios::binary模式下打开流时使用读/写的区别
EN

Stack Overflow用户
提问于 2012-10-07 14:27:11
回答 2查看 1.9K关注 0票数 4

在我使用以下代码片段进行的实验中,我没有发现是否使用ios:binary模式创建流有任何特别的区别:

代码语言:javascript
复制
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时,何时使用它,何时不使用它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-07 15:34:16

binarytext模式之间的唯一区别是如何处理'\n‘字符。

binary模式下,没有转换。

text模式下,\n在写入时转换为end of line sequence

text模式下,end of line sequence在读取时转换为\n

end of line sequence依赖于平台。

示例:

基于ASCII的系统:

代码语言:javascript
复制
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.
票数 10
EN

Stack Overflow用户

发布于 2012-10-07 14:31:59

如果要以二进制格式编写文件,而不对数据进行任何修改,请指定ios::binary标志。当你想在文本模式下写文件时,不要指定ios::binary,你可能会得到像行尾翻译这样的东西。如果您使用的是类UNIX平台,则二进制和文本格式是相同的,因此您看不到任何区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12766636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档