首页 理论教育C++程序设计基础教程-文件的打开与关闭技巧

C++程序设计基础教程-文件的打开与关闭技巧

【摘要】:◇ios∷noreplace如果文件存在,则打开失败。◇1只读文件◇2隐含文件◇4系统文件与其他状态标志一样,参数mode的符号常量可以用位或运算符“|”组合在一起,如ios∷in|ios∷binary表示以只读方式打开二进制文件。当流对象的生存期结束后,相应的析构函数也会将文件关闭。

文件流可以分为3类:输入文件流、输出文件流以及I/O文件流,相应地必须将文件流声明为ifstream、ofstream以及fstream类的对象。例如:

声明了文件流对象之后,可使用函数open()打开文件。open()的函数原型为:

void open(const char*filename,intmode,int prot=filebuf∷openprot);

其中,filename是文件名字,它可包含路径说明。mode指出文件打开的模式,它对文件的操作影响重大,mode的取值如下:

◇ios∷in 读方式打开文件。将这种模式应用于ifstream,这是文件输入流的默认方式。

◇ios∷out 写方式打开文件。将这种模式应用于ofstream,若文件存在,则先删除文件中数据,然后再写入数据;若文件不存在,则自动建立文件。这是文件输出流的默认方式。

◇ios∷ate 打开一个已存在文件(输入或输出),并把文件指针指向文件末尾。

◇ios∷app 写方式打开文件,仅用于在文件末尾添加数据。

◇ios∷trunc 如果文件存在,则清除原文件内容。

◇ios∷nocreate 如果文件不存在,则打开失败,不创建新文件。

◇ios∷noreplace 如果文件存在,则打开失败。

◇ios∷binary 以二进制方式打开文件。默认的打开方式为文本文件。

对于ifstream文件流,mode的默认值为ios∷in;对于ofstream文件流,mode的默认值为ios∷out。

参数prot确定文件的访问方式,取值如下:

◇0 普通文件,一般情况下,该访问方式为默认值。

◇1 只读文件(www.chuimin.cn)

◇2 隐含文件

◇4 系统文件

与其他状态标志一样,参数mode的符号常量可以用位或运算符“|”组合在一起,如ios∷in|ios∷binary表示以只读方式打开二进制文件。例如:

ifstream ifile;

ifile.open("d:\\vc\\test.txt",ios∷ate)

表示以文本文件形式打开d:\vc目录下的test.txt文件,文件指针定位到文件尾,准备进行读文件操作。而操作:

ofstream ofile;

ofile.open("d:\\vc\\test.txt",ios∷binary)

表示以二进制文件形式打开d:\vc目录下的test.txt文件,准备进行写文件操作。

注意:文件的读写是相对程序(程序加载在内存中)而言的,文件的读操作是把文件数据送入内存,也称为文件输入,文件的写操作是把内存中的数据送到文件中保存,也称为文件输出。

除了调用open()成员函数外,ifstream、ofstream和fstream这3类流的构造函数也可以打开文件,其参数与open()函数相同。例如:

ifstream ifile("d:\\vc\\test.txt");//自动调用ifstream类的构造函数

如果使用构造函数或open()打开文件失败,对应的文件流对象返回一个非NULL值。可以利用这一点检测文件打开操作是否成功,如果不成功则做特殊处理。这种异常处理模式一般格式如下:

继续正常的文件操作

打开的文件使用完毕后,必须使用close()函数将其关闭,其作用是将缓冲区的内容刷新并撤消流与文件之间的连接。当流对象的生存期结束后,相应的析构函数也会将文件关闭。