14.8.3 取消文件和流的关联

    当流对象生命期结束被撤销时,该对象和文件的关联会自动断开。此外,C++还提供了close函数来显式断开文件和流的连接,如下所示。


    logfile.close();//假定logfile为ostream类对象

    注意

    close函数的操作仅仅是断开了文件和流的连接,流对象并不会被撤销,流缓冲区中的数据也会被保留,这个流还可以关联到其他的文件中,如示例代码14.27所示。

    代码14.27 C++流类库文件操作FileOperation


    <———————————-文件名:example1427.cpp———————————————-> 01 #include<iostream> 02 #include<fstream> 03 using namespace std; 04 int main() 05 { 06 ofstream of("ex1. txt");//创建ofstream类对象of,采用默认的openmode 07 of<<"Hello,this is example1"<<endl;//同使用cout一样使用of将字符串写入关联文件中 08 of. close();//断开的只是of和ex1.txt 09 double x; 10 cout<<"请输入x的大小:"<<endl;//正常使用iostream中定义的标准输入输出对象 11 cin>>x; 12 of. open("ex2.txt");//of重新关联到ex2.txt中 13 of<<"您输入的数据是:"<<x<<endl;//输出到ex2.txt中 14 of. close();//断开连接 15 return 0; 16 }

    输出结果如下所示。


    请输入x的大小: 3.1415(用户输入)此时,在文件夹中创建了ex1.txt和ex2.txt两个文本文件,其中的内容分别如下所示。 Hello,this is example1(注:ex1.txt中的内容) 您输入的数据是:3.1415(注:ex2.txt中的内容)

    【代码解析】代码第6行创建了ofstream类对象of,利用构造函数在其创建时便和文件ex1.txt相关联,构造函数的第2个参数采用了默认值的形式,即ios_base:out|ios_base:trunc,如果文件不存在,则创建之,否则,将其删除重新创建(也可理解为改写),而且,of.close()操作仅起到断开流对象of和文件关联的作用,并不会撤销of,因此,还可以使用open函数令of和另一个文件ex2.txt关联。

    可以像使用cout一样应用of对文件进行写操作,这里所讲的输入输出是针对程序来说的,由程序向文件传送数据是写操作,从文件向程序传送数据是读操作。稍后会有读写操作的相关介绍。

    说明

    前面所讲的输入输出流的机制,如各种插入符>>的定义、格式化方法、控制符和流状态等完全适用于文件流对象。