深入理解C++中的文件操作

2020-01-06 16:27:11王冬梅

向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout

2、析取器(>>)

从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。

在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。

下面就把此类的文件操作过程一一道来。

一、打开文件

在fstream类中,有一个成员函数open() ,就是用来打开文件的,其原型是:


void open(const char* filename,int mode,int access);

参数:

      filename: 要打开的文件名

      mode: 要打开文件的方式

      access: 打开文件的属性

打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:

      ios::app: 以追加的方式打开文件

      ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性

      ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文

      ios::in: 文件以输入方式打开

      ios::out: 文件以输出方式打开

      ios::nocreate: 不建立文件,所以文件不存在时打开失败

      ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败

      ios::trunc: 如果文件存在,把文件长度设为0

可以用“或”把以上属性连接起来,如ios::out|ios::binary

打开文件的属性取值是:

      0:普通文件,打开访问

      1:只读文件

      2:隐含文件

      4:系统文件

可以用“或”或者“+”把以上属性连接起来 ,如3或1|2就是以只读和隐含属性打开文件。

例如:以二进制输入方式打开文件c:config.sys


fstream file1;
file1.open("c:config.sys",ios::binary|ios::in,0);

如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:


file1.open("c:config.sys");<=>file1.open("c:config.sys",ios::in|ios::out,0);