文件输入/输出是否需要二进制标志?

时间:2015-11-12 04:05:07

标签: c++ fstream

我能够在不设置任何二进制标志的情况下进行读写:

#include <fstream>
#include <iostream>

struct C {

    C(int X = 0, int Y = 0) :x(X), y(Y) {}

    int x; int y;
};

int main()
{
    C Point1(4, 9);
    C Point2;

    std::fstream IOFile("Test.txt", 
        std::ios_base::in | std::ios_base::out);

    IOFile.write((char const*)&Point1, sizeof(C));

    IOFile.seekg(std::ios_base::beg);

    IOFile.read((char*)&Point2, sizeof(C));

    IOFile.close();
}

无论是否设置了二进制标志,写入和读取函数都返回相同的数据。那么,这个标志真的有必要在哪里?

2 个答案:

答案 0 :(得分:2)

它取决于系统。 UNIX / Linux在文本模式和二进制模式之间没有任何区别。 Windows确实如此。因此,为了获得最大的可移植性,每当您读取/写入原始数据流时都要使用二进制文件。

答案 1 :(得分:2)

在UNIX上,没有区别。

在Windows上,LF(\n)在写入时被翻译成Windows CRLF(\r\n)行结束序列,反之亦然。如果文件是在文本模式下打开的话。在二进制模式下,不进行翻译。

Pre-OSX Mac使用CR(\r)作为行结尾,因此\n在写入时变为\r,在阅读时变为反向。 OSX是一个基于UNIX的操作系统,因此它不执行任何转换。