C++文件打开模式详解

文件打开模式是决定如何使用文件的设置。openmode 类型定义在一个名为 ios 的流相关类中。这种类型的值是 ios 类的静态常量成员。每个这样的值表示一个标志或一个可以在文件打开时设置的选项。表 1 列出了文件模式标志及其含义。

表 1 文件模式标志
文件模式标志 含 义
ios::app 追加:输出将始终发生在文件的末尾
ios::ate 最后:输出最初在文件的末尾进行
ios::binary 二进制:读取或写入文件的数据是二进制形式的
ios::in 输入:文件将允许输入操作。如果文件不存在,打开将失败
ios::out 输出:文件将允许输出操作。如果文件不存在,则创建一个给定名称的空文件
ios::trunc 截断:如果打开的文件存在,其内容将被丢弃,其大小被截断为零

二元或运算符 | 可以用来结合两个或更多标志的效果。例如,以下打开模式将导致打开的文件既可以输入也可以输出,并且输出最初在文件的末尾进行:

ios::in | ios::out 丨 ios::ate

以下是使用 fstream 打开 3 个文件执行输入、输出和输入输出的示例:
fstream inFile, outFile, inOutFile;
inFile.open("in.txt", ios::in);
outFile.open ("out.txt", ios::out);
outFile.open("inout.txt", ios::in | ios::out);
注意,使用 ios::out 标志会使现有文件的内容被删除,因为它假定程序员想要覆盖文件。如果 ios::out 与 ios::app 结合使用,则现有文件的内容将被保留,并且所有新数据都会附加到文件的末尾。

使用构造函数打开文件

ifstream、ofstream 和 fstream 这 3 个流类都有初始化构造函数,使用其中的一个初始化构造函数即可在单个语句中创建流对象并打开一个文件:

fstream outFile("inout.txt", ios::in | ios::out);