文件流的使用
(1)ifstream,由istream派生而来,提供读文件的功能。
(2)ofstream,由ostream派生而来,提供写文件的功能。
(3)fstream,由iostream派生而来,提供读写同一个文件的功能。
注:可以用IO操作符(<<和>>)在文件上实现格式化的IO。还定义了两个自己的新操作--open和close
写个小程序:
ifstream input;
vector<string>::const_iterator it = files.begin(); //vector对象files包含一些要打开并读取的文件名
while (it != files.end()) {
input.open(it->c_str());
if (!input) //检查文件打开是否成功
break;
while (input >> s)
process(s);
input.close(); //关闭文件流
input.clear(); //重置文件流的状态state为ok
++it;
}
注:
1、在创建fstream对象时,如果调用open或使用文件名做初始化式,需要传递的实参应为C风格字符串,一般把使用的文件名保存在string对象中,再调用c_str成员获取C风格字符串。
2、如果打算重用已存在的流对象,再每次使用完流对象后要关闭(close)和清空(clear)文件流。
3、调用clear后,就像重新创建了该对象一样。
文件模式
in
|
打开文件做读操作
|
out
|
打开文件做写操作
|
app
|
在每次写之前
找到文件尾
|
ate
|
打开文件后立即将文件
定位到
文件尾
|
trunc
|
打开文件时清空已存在的文件流
|
binary
|
以二进制模式进行IO输出
|
out
| 打开文件做读操作,删除文件中已有的数据 |
out | app | 打开文件做写操作,在文件尾写入 |
out | trunc | 与out模式相同 |
in | 打开文件做读操作 |
in | out | 打开文件做读、写操作,并定位与文件开头处 |
in | out | trunc | 打开文件做读、写操作,删除文件中已有的数据 |
注:
1、out、trunc、app模式只能用于指定与ofstream或fstream对象关联的文件;in模式只能用于指定与ifstream或fstream对象关联的文件。所有文件都可以用ate或binary模式打开。
2、对于用ofstream打开的文件,要保存文件中已存在的数据,唯一的方法时显示的指定app模式打开。
3、fstream对象既可以读也可以写它所关联的文件。fstream如何使用它的文件取决于打开文件时指定的模式。
4、默认情况下,fstream对象以in和out模式同时打开。
5、模式时文件的属性而不是流的属性,每次打开文件时都会设置模式。
6、打开模式的有效组合如第二个表格所示。上述所有打开模式组合还可以添加ate模式,只会改变文件打开时的初始定位,在第一次读或写之前,将文件定位于文件末尾处。
ostream outfile("file1");
ofstream outfile("file1",ofstream::out | ofstream::trunc);//效果与上一行相同
ofstream appfile("file2",ofstream::app);
fstream inout("copyOut",fstream::in | fstream::out);
ostream outfile;
outfile.open("precious",ofstream::app);