当前位置:编程学习 > C/C++ >>

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 <fstream>  
  
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操作系统中。博主没有测试环境,希望有条件的同学能够帮忙测试下,分享一下结果,谢谢。
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,