在打开文件时,无论是调用open还是以文件名作为流初始化的一部分,都需要指定文件模式(file mode)。每个fstream类都定义了一组表示不同模式的值,用于指定流打开的不同模式。与条件状态标志一样,文件模式也是整型常量,在打开指定文件时,可用位操作符设置一个或多个模式。文件流构造函数和open函数都提供了默认实参设置文件模式。默认值因流类型的不同而不同。此外,还可以显式地以模式打开文件。
in 打开文件做读操作
out 打开文件做写操作
app 在每次写之前找到文件尾
ate 打开文件后立即将文件定位在文件尾
trunc 打开文件时清空已存在的文件流
binary 以二进制模式进行IO操作
out、trunc和app模式只能用于指定与ofstream或fstream对象关联的文件;in模式只能用于指定与ifstream或fstream对象关联的文件。所有的文件都可以用ate或binary模式打开。ate模式只在打开时有效:文件打开后将定位在文件尾。以binary模式打开的流将文件以自己序列的形式处理,而不解释流中的字符。
默认时,与ifstream流对象关联的文字将以in模式打开,该模式允许文件做读的操作;与ofstream关联的文件则以out模式打开,使文件可写。以out模式打开的文件会被清空:丢弃该文件存储的所有数据。
从效果来看,为ofstream对象指定out模式等效于同时指定了out和trunc模式。
对于用ofstream打开的文件,要保存文件中已存在的数据,唯一方法是显式地指定app模式打开。
1. 对同一个文件作输入和输出运算
默认情况下,fstream对象以in和out模式同时打开。当文件同时以in和out打开时不清空。如果打开fstream所关联的文件时,只使用out模式,而不指定in模式,则文件会清空已存在的数据。如果打开文件时指定了trunc模式,则无论是否同时指定了in模式,文件同样会被清空。
string file("C:\\Documents and Settings\\10170660\\Desktop\\AssetHttpHandler.py");
fstream inoutfile(file.c_str(), fstream::in|fstream::out);
2. 模式是文件的属性而不是流的属性
每次打开文件时都会设置模式。
只要调用open函数,就要设置文件模式,其模式的设置可以使显式的也可以是隐式的。如果没有指定文件模式,将使用默认值。
3. 打开模式的有效组合
并不是所有的打开模式都可以同时指定。
out 打开文件做写操作,删除文件中已有的数据
out|app 打开文件做写操作,在文件尾写入
out|trunc 与out模式相同
in 打开文件做读操作
in|out 打开文件做读、写操作,并定位于文件开头处。
in|out|trunc 打开文件做读、写操作,删除文件中已有的数据。
上述所有的打开模式组合还可以添加ate模式。对这些模式添加ate只会改变文件打开时的初始定位,在第一次读或写之前,将文件定位于文件末尾处。