1. 文件模式常量
常量 | 含义 |
ios_base::in | 打开文件,以便读取 |
ios_base::out | 打开文件,以便写入 |
ios_base::ate | 打开文件,并移到文件尾 |
ios_base::app | 追加到文件尾 |
ios_base::trunc | 如果文件存在,则截短文件 |
ios_base::binary | 二进制文件 |
ifstream/ofstream/fstream构造函数以及open()方法都接受两个参数。
ifstream open()方法和构造函数用ios_base::in作为模式参数的默认值;ofstream open()方法和构造函数用ios_base::out|ios_base::trunc作为模式参数的默认值;fstream类不提供默认的模式值,因此在创建这种类的对象时,必须显式的提供模式。
2. C++和C的文件打开模式
C++模式 | C模式 | 含义 |
ios_base::in | "r" | 打开以读取 |
ios_base::out | "w" | 等价于ios_base::out | ios_base::trunc |
ios_base::out | ios_base::trunc | "w" | 打开以写入,如果已存在,则截短文件 |
ios_base::out | ios_base::app | "a" | 打开以写入,只追加 |
ios_base::out | ios_base::in | "r+" | 打开以读写,在文件允许的位置写入 |
ios_base::out | ios_base::in | ios_base::trunc | "w+" | 打开以读写,如果已存在,则截短文件 |
c++mode | ios_base::binary | "cmodeb" | 以C++mode(或相应的cmode)和二进制模式打开;例如,ios_base::in|ios_base::binary成为"rb" |
c++mode | ios_base::ate | "cmode" | 以指定的模式打开,并移至文件末尾。C使用一个独立的函数调用,而不是模式编码。例如,ios_base::in|ios_base::ate被转换为"r"模式和C函数调用feek(file, 0, SEEK_END) |
注意,ios_base::ate和ios_base::app都将文件指针指向打开的文件尾,二者的区别在于,ios_base::app模式只允许将数据添加到文件尾,而ios_base::ate模式将指针放到文件尾。