头文件fstream给出了三个类型来支出文件IO:
- ifstream从一个给定文件读取数据
- ofstream向一个给定的文件写入数据
fstream可以读写给定文件
1.使用文件流对象
当我们想读写一命名文件时,可以先定义一个文件流对象,并将文件与对象关联起来。然后用文件流类的open函数完成一些操作。
ifstream in(iflile);//定义一个流并且与文件ifile关联
ofstream out;//未关联任何文件的输出流
C++11中文件名可以为string类型也可以是C风格的字符数组。
用fstream 代替iostream&
在使用基类型对象的地方可以用其继承类的对象来代替,所以接受一个iostream类型引用(或指针)参数的函数,可以用一个对应的fstream类型来调用。
成员函数open和close
定义了流对象后可以通过open函数来关联文件
ifstream in(iflie);//关联了ifile
ofstream out;
out.open(ofile);//通过open 关联了ofile
由于调用open可能失败所以要对其进行检查
if(out)
文件一旦被open打开,其他任何试图使用文件流的操作都将失败,所以在使用完后需要通过close将其关闭。
out.close();
当一个fstream流被销毁时,close函数会被自动调用。
2.文件模式
每个流都有一个关联的文件模式,用来指出如何使用文件:
- in 以读的方式打开
- out 以写的方式打开
- app每次写操作前都先定位文件的末尾
- ate打开文件后立即定义到文件末尾
- trunc截断文件
- binary以二进制方式进行io
默认情况下我们打开一个文件,文件内容都将会被丢弃。若为了保存文件原有内容需要显示的指定app模式。
ofstream out("file1");//默认截断
ofstream out1("file2",ofstream::out);
ofstream out3("file3",ofstream::out|ofstream::trunc);//显式截断
//为了保存文件,显式指定app模式
ofstream app("file",ofstream::app);
对于一个给定的流,每当用open打开流的时候都可以改变其文件模式。
ofstream out;
out.open("file");//隐式设置为输出和截断
out.close();
out.open("file",ofstream::app);//模式为输出和追加
out.close();