fstream不仅继承了iostream类型的操作,还增加了一些对文件进行操作的成员。
定义一个文件流对象,对文件实现读写操作,并将流与文件关联。
每个文件流类都定义了名为open的成员函数,并且创建文件流对象时,如果指定了文件名,那么就会自动调用open这个成员函数,也可以不指定文件名。
在C++新标准中,文件名可以是string类型,或者是C版风格字符串类型。
旧版本标准只允许C版风格字符串类型。
因为在类的继承中,在使用父类对象的地方,也可以用子类对象来代替
ifstream in(file);//创建一个ifstream,并打开文件file,定义时带文件名
ofstream out;//创建一个ofstream,但是并没有指定文件名,后续可以用open成员函数打开文件
out.open(file);//打开文件file
if(out);//判断是否打开成功
一个文件流被打开,就应该与文件保持关联,如果要使文件流关联另一个文件,要先使用close成员函数关闭先前的文件。
例子:
ifstream in(file);//将文件流与文件file关联
in.close();//断开关联(关闭文件file)
in.open(file1);//文件流in与文件file1建立关联
打开一个已经打开了的文件,会使文件流的failbit置位,之后文件流的所有操作都会失效。
当一个流对象被销毁时,close成员函数会被自动执行。
在任何方式下打开文件,都可以指定文件模式,但是文件模式也有限制:
每个文件流类型都定义了默认文件模式,在没有指定文件模式的情况下:
使用文件模式需要注意的地方:
以out模式打开文件,文件之前的内容会被清空。想要继续在原有数据上进行追加,那就需要使用app模式。
ofstream app("str",ofstream::app);//在原有数据上继续追加数据
ofstream app1("str",ofstream::app | ofstream::out);//与上面的操作一致,显式的使用out模式,其实app模式会自动使用out模式,这也是两个模式同时使用的语法
ofstream out;
out.open("str",ostream::out);//使用out模式打开
out.close();//关闭文件,则可将文件流关联到其他文件