打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:
- ios::app: 以追加的方式打开文件
- ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
- ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
- ios::in: 文件以输入方式打开(文件数据输入到内存)
- ios::out: 文件以输出方式打开(内存数据输出到文件)
- ios::nocreate: 不建立文件,所以文件不存在时打开失败
- ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
- ios::trunc: 如果文件存在,把文件长度设为0
ofstream流
- ios::app,如果没有文件,那么生成空文件;如果有文件,那么在文件尾追加。
- ios::app | ios::in,不管有没有文件,都是失败。 ios::app不能用来打开输入流,即不能和ios::in相配合
- ios::ate,如果没有文件,那么生成空文件;如果有文件,那么清空该文件
- ios::ate | ios::in,如果没有文件,那么打开失败;如果有文件,那么定位到文件尾,并可以写文件,但是不能读文件
ifstream流
- ios::app,不管有没有文件,打开都是失败;
- ios::ate,如果没有文件,打开失败;如果有文件,打开成功,并定位到文件尾,但是不能写文件
fstream流
- 默认是ios::in,所以如果没有文件,ios::app和ios::ate都是失败,
- ios::app | ios::out,如果没有文件则创建文件,如果有文件,则在文件尾追加
- ios::ate | ios::out,如果没有文件则创建文件,如果有,则清空文件。
- ios::ate | ios::out | ios::in,如果没有文件,则打开失败,有文件则定位到文件尾
每个文件流都应与一个打开的文件相联系:
1 | // (1)在建立文件流对象的同时打开文件: |