欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++文件流的建立与关闭

程序员文章站 2022-07-09 22:12:12
C++文件流的建立与关闭:文件流以磁盘文件以及其他可按文件方式进行管理的外部设备作为输入输出对象。ifstream是文件输入流类,ofstream是文件输出流类,fstream是文...

C++文件流的建立与关闭:文件流以磁盘文件以及其他可按文件方式进行管理的外部设备作为输入输出对象。ifstream是文件输入流类,ofstream是文件输出流类,fstream是文件输如输出流类。要利用这些类来定义文件流对象,必须在程序的开始部分包含预处理命令: #include

》文件流的建立

每个文件流都应与一个打开的文件相联系:

(1)在建立文件流对象的同时打开文件:

ifstream fin("d:\\sav\\datafile.dat");

(2)先建立文件流对象,再在适当的时候打开文件:

ifstream fin;

......

fin.open(("d:\\sav\\datafile.dat");

注:在用字符串常量表示一个文件名时,文件路径中的\必须表示为转义字符‘\\’,因此上面的"d:\\sav\\datafile.dat"所表示的全路径文件名是d:\sav\datafile.dat

可以通过构造函数或open函数的第二个参数,确定文件的打开模式。 打开模式用下列常量表示:

# ios_base::app 为添加数据而打开,从文件尾部开始写

# ios_base::binary 作为二进制文件打开

# ios_base::in 为输入而打开

# ios_base::out 为输出而打开

# ios_base::trunc 若文件存在,截为空文件

# ios_base::ate 打开文件后定位于文件尾

以上模式可结合使用,如ios_base::in|ios_base::binary,表示作为二进制输入文件打开。



对于ifstream,默认的打开模式是ios_base::in。ifstream只能用于输入,它没有提供任何用于输出的操作。打开ifstream文件流时,采用ios_base::out、ios_base::app、ios_base::trunc、ios_base::ate等这些与输出有关的打开模式是毫无意义的。

对于ofstream,默认的打开模式是ios_base::out。ofstream只能用于输出,它没有提供任何用于输入的操作。打开ofstream文件流时,采用ios_base::in这样与输入有关的模式是毫无意义的。

对于fstream,没有默认的打开模式,因此在打开文件时必须在ios_base::in、ios_base::out、ios_base::in|ios_base::out这三个打开模式中指定一个。

注:ios_base::in对于fstream,以及ios_base::out对于oftream,不但是默认的,而且是固定不变的。例:

ofstream str("out.txt",ios_base::out|ios_base::app);

可以简化为如下等价形式:

ofstream str("out.txt",ios_base::app);

如果以ios_base::in模式打开文件而文件又不存在,通过fail()可测出打开失败(返回值为true)。如果以ios_base::out模式打开文件而文件又不存在,则将自动建立一个新文件。

示 例:

下面是利用文件流这一特性的例子,例子中的函数用于建立文件,返回0时表示建立成功,返回非0时表示建立失败。失败时如果返回-1表示是由于同名文件已存在,返回1时表示失败是由于磁盘I/O错等其它原因。函数利用输入文件流检测文件是否存在,利用输出文件流来创建文件:

int createFile(const char* filename){

if(ifstream(filename).fail()) return -1;

return ofstream(filename).bad();

}
》文件流的关闭

关闭文件流使用成员函数close(),例如若fin是一个文件流对象,则可有下面的语句关闭文件:

fin.close();

如果程序没有用close()主动关闭文件,则在文件流对象退出其作用域时,被自动调用的析构函数会关闭该对象所联系的文件。提倡在打开的文件不再需要时及时并主动地将之关闭,以便尽早的释放所占用的系统资源并尽早将文件置于更安全的状态。