background image

C++文件操作详解(ifstream、ofstream、fstream)

时间:2009-12-04 01:20 来源:

 

未知 作者:jacky 点击:次

C++ 文 件 输 入 输 出 : ofstream: 写 操 作 ( 输 出 ) 的 文 件 类 ( 由 ostream 引 申 而

来);ifstream:读操作(输入)的文件类(由 istream 引申而来);fstream:可同时读写操作

的文件类(由 iostream 引申而来)

TAG:C++  

  

文件操作 ifstream  ofstream  fstream   

C++ 通过以下几个类支持文件的输入输出:

ofstream: 

 

写操作(输出)的文件类 (由 ostream 引申而来) 

ifstream: 读操作(输入)的文件类(由 istream 引申而来) 

fstream: 

 

可同时读写操作的文件类 (由 iostream 引申而来) 

打开文件(Open a file)

对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就
是说打开一个文件。被打开的文件在程序中由一个流对象(stream object)

 

来表示 (这些

类的一个实例) ,而对这个流对象所做的任何输入输出操作实际就是对该文件所做的操

作。

要通过一个流对象打开一个文件,我们使用它的成员函数 open():
void open (const char * filename, openmode mode);

这里 filename 是一个字符串,代表要打开的文件名,mode 是以下标志符的一个组合:
ios::in 为输入(读)

 

而打开文件

ios::out 为输出(写)

 

而打开文件

ios::ate 

 

初始位置:文件尾

ios::app 

 

所有输出附加在文件末尾

ios::trunc 

 

如果文件已存在则先删除该文件

ios::binary 二进制方式

” ”

这些标识符可以被组合使用,中间以 或 操作符(|)间隔。例如,如果我们想要以二进制

方式打开文件"example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数
open()来实现:

ofstream file;
file.open ("example.bin", ios::out | ios::app | ios::binary);

ofstream, ifstream   

和 fstream 所有这些类的成员函数 open 都包含了一个默认打开文

件的方式,这三个类的默认方式各不相同:

 

 

类 参数的默认方式
ofstream ios::out | ios::trunc 

ifstream ios::in 
fstream ios::in | ios::out

只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。如果函数被调用
时声明了任何参数,默认值将被完全改写,而不会与调用参数组合。

由于对类 ofstream, ifstream   

和 fstream 的对象所进行的第一个操作通常都是打开文

件,这些类都有一个构造函数可以直接调用 open 函数,并拥有同样的参数。这样,我

们就可以通过以下方式进行与上面同样的定义对象和打开文件的操作:
ofstream file ("example.bin", ios::out | ios::app | ios::binary);

两种打开文件的方式都是正确的。
你可以通过调用成员函数 is_open()来检查一个文件是否已经被顺利的打开了:

bool is_open();

它返回一个布尔(bool)值,为真(true)代表文件已经被顺利打开,假( false )则相反。

关闭文件(Closing a file)

当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。关闭文件

需要调用成员函数 close(),它负责将缓存中的数据排放出来并关闭文件。它的格式很简

单:
void close ();

这个函数一旦被调用,原先的流对象(stream object)就可以被用来打开其它的文件了,

这个文件也就可以重新被其它的进程(process)所有访问了。

为防止流对象被销毁时还联系着打开的文件,析构函数(destructor)将会自动调用关闭

函数 close。