C++文件流ios::binary的作用

在创建文件流时,可以显示指定它的打开方式为ios::binary,也就是以二进制方式打开。但是,无论是否指定二进制方式打开文件,读写的最小单位都是字节。那么,它到底起到什么作用呢?以二进制方式打开与普通打开方式的区别是什么?

实际上,二者最大的区别在于对换行符的处理方式不同。由于历史原因,Windows操作系统是用两个字符(\r\n)来表示换行符的;而Unix操作系统却是用单个字符(\n)来表示换行符的。因此,在创建文件流时,如果指定了以ios::binary方式打开,那么换行符就是单字符的;否则,就采用Windows操作系统的双字符。下面用一个简单的例子来观察一下,代码比较简单,注意两种情况仅仅是写入文件时一个采用二进制方式,一个采用默认的方式。

// BinaryIo.cpp : Defines the entry point for the console application.  

//  



include "stdafx.h"  

include   



int _tmain(int argc, _TCHAR* argv[])  

{  

    std::ofstream out("file.txt");  

    //std::ofstream out("file.txt", std::ios::binary);  

    out<<"test\n";  

    out.close();  

    std::ifstream in("file.txt", std::ios::binary);  

    char c;  

    while((c = in.get()) != EOF) {  

        if (c == '\r') {  

            printf("%s", "\\r");  

        } else if (c == '\n') {  

            printf("%s", "\\n");  

        } else {  

            printf("%c", c);  

        }  

    }  

    in.close();  

    return 0;  

}  

第一种情况的结果为:

test\r\n请按任意键继续. . . 

第二种情况的结果为:

test\n请按任意键继续. . . 

两种情况的区别一目了然,因此我们可以简单总结成:以ios::binary方式打开,换行符被解释成\r\n;反之,换行符被解释成\n。

另外一个问题是在Unix(或类Unix)操作系统中,指定和不指定ios::binary方式是否有区别呢?也就是说这种差异是否仅仅体现在Windows操作系统中。博主没有测试环境,希望有条件的同学能够帮忙测试下,分享一下结果,谢谢。

来源:https://www.2cto.com/kf/201309/245889.html

你可能感兴趣的:(C/C++,c++)