学科分类
目录
C++基础

文件的打开与关闭

学习文件操作之前首先要了解最基本的文件操作,文件的打开与关闭。下面将针对文件的打开与关闭进行详细地讲解。

1、打开文件

操作文件之前首先要打开文件,不打开文件就不能对其进行读写。C++提供两种打开文件的方式:调用文件流的成员函数open()、调用文件流的构造函数打开文件。

用文件流的构造函数打开文件,就是在构造文件流对象时传入指定的文件,在上一节中已经讲述,而本节主要讲解open()成员函数。

ifstream类、ostream类和fstream类都提供了成员函数open()用于打开文件,其格式如下所示:

void open(const char* filename, int mode, int prot = filebuf::openprot);

第一个参数filename是要打开文件的文件名;第二个参数表示文件打开的方式;第三个参数是文件打开时的保护方式,该参数与操作系统有关,通常默认值为filebuf::openprot。

如果文件打开失败,open()函数执行后流对象的值为0(假);如果是调用构造函数来打开文件失败,则流对象的值为0,可以据此测试文件打开是否成功。

文件的打开方式有多种,例如以输入方式打开文件、以输出方式打开文件,文件打开方式都是在ios类中定义的,具体如表1所示。

表1 文件打开模式

文件打开模式 说明
ios::in 以输入方式打开文件;
ios::out 以输出方式打开文件,若文件不存在,则创建;若存在,则清空文件;
ios::app 以输出方式打开文件,用于在文件尾追加数据;
ios::ate 打开一个现存文件(输入或输出)并查找到结尾;
ios::trunc 打开一个文件,如果文件已存在,则删除其中全部数据,如文件不存在,则建立新文件。如已指定了 ios::out 方式,而未指定ios: :app,ios::ate,ios: :in,则同时默认此方式;
ios::binary 以二进制方式打开文件,不指定则默认为ASCII方式;
ios::nocreate 打开一个已有文件,若不存在则打开失败;总与in或out结合使用;
ios::noreplace 创建一个新文件,若文件已存在则创建失败;通常与out方式结合使用;

​ 这些文件打开方式通常可组合搭配使用,用“位或”运算符对输入输出方式进行组合。例如下面代码:

ofstream ofs; 
ofs.open("Hello.txt", ios::in|ios::out|ios::binary) 

对于ifstream类对象其打开文件的默认方式是ios::in,ostream类对象打开文件的默认方式是ios::out,fstream类对象默认打开方式为ios::in|ios::out。

2、关闭文件

打开文件并对文件操作结束后要关闭文件。关闭是释放缓冲区和其他资源的过程,不关闭文件就会慢慢耗光系统资源。C++中ifstream类、ostream类和fstream类都提供了一个成员函数close()用于关闭~~打开~~文件,其格式如下所示:

void close();

对于ofstream类来说,析构函数会自动完成关闭,但如果需要在同一个流上打开另外的文件,就需要使用close()函数了。例如下面的代码:

ofstream ofs;
ofs.open("file1"); //打开file1文件
ofs.close();  //关闭file1文件
ofs.open("file2"); //关闭file1文件后,再打开file2文件
ofs.close();

学习完文件的打开和关闭操作后,就可以开始对文件的具体操作进行学习了。接下来通过一个简单案例来学习一下文件的打开和关闭操作。

先在桌面上建立一个a.txt文件,如图1所示。

图1 a.txt文件内容

以后如无特殊说明,本书在建立读写文件时均指在桌面创建,读者也可在程序根目录下创建,接下来编写打开关闭文件的代码,如例1所示。

例1

 1    #include <iostream>
 2    #include <fstream>  //包含fstream头文件
 3    using namespace std;
 4    int main()
 5    {
 6        ifstream ifs;  //构造输入流
 7        ifs.open("C:\\Users\\www\\Desktop\\a.txt", ios::in); //以输入方式打开
 8        if (!ifs)
 9            cout << "open failed" << endl;
 10        else
 11            cout << "open success" << endl;
 12        ifs.close();
 13        system("pause");
 14        return 0;
 15    }

运行结果如图2所示。

图2 例1运行结果

由图2所知,文件打开成功。在操作文件结束后要调用close()函数关闭文件。

点击此处
隐藏目录