C++中的文件输入/输出(3):掌握输入/输出流

发表于:2007-07-01来源:作者:点击数: 标签:
C++ 中的文件输入 / 输出 (3) 原作: Ilia Yordanov, 掌握输入 / 输出流 在这一章里,我会提及一些有用的函数。我将为你演示如何打开一个可以同时进行读、写操作的文件;此外,我还将为你介绍其它打开文件的方法,以及如何判断打开操作是否成功。因此,请接

C++中的文件输入/输出(3)

原作:Ilia Yordanov, 

 

掌握输入/输出流

 

在这一章里,我会提及一些有用的函数。我将为你演示如何打开一个可以同时进行读、写操作的文件;此外,我还将为你介绍其它打开文件的方法,以及如何判断打开操作是否成功。因此,请接着往下读!

到目前为止,我已为你所展示的只是单一的打开文件的途径:要么为读取而打开,要么为写入而打开。但文件还可以以其它方式打开。迄今,你应当已经认识了下面的方法:

 

ifstream OpenFile(“cpp-home.txt”);

 

噢,这可不是唯一的方法!正如以前所提到的,以上的代码创建一个类ifstream的对象,并将文件的名字传递给它的构造函数。但实际上,还存在有不少的重载的构造函数,它们可以接受不止一个的参数。同时,还有一个open()函数可以做同样的事情。下面是一个以上代码的示例,但它使用了open()函数:

 

ifstream OpenFile;

OpenFile.open(“cpp-home.txt”);

 

你会问:它们之间有什么区别吗?哦,我曾做了不少测试,结论是没有区别!只不过如果你要创建一个文件句柄但不想立刻给它指定一个文件名,那么你可以使用open()函数过后进行指定。顺便再给出一个要使用open()函数的例子:如果你打开一个文件,然后关闭了它,又打算用同一个文件句柄打开另一个文件,这样一来,你将需要使用open()函数。

考虑以下的代码示例:

 

#include <fstream.h>

 

void read(ifstream &T) //pass the file stream to the function

{  

//the method to read a file, that I showed you before

    char ch;

 

    while(!T.eof())

    {

       T.get(ch);

       cout << ch;

    }

   

    cout << endl << "--------" << endl;

}

 

void main()

{

    ifstream T("file1.txt");

    read(T);

    T.close();

 

    T.open("file2.txt");

    read(T);

    T.close();

}

 

据此,只要file1.txt和file2.txt并存储了文本内容,你将看到这些内容。

现在,该向你演示的是,文件名并不是你唯一可以向open()函数或者构造函数(其实都一样)传递的参数。下面是一个函数原型:

 

ifstream OpenFile(char *filename, int open_mode);

 

你应当知道filename表示文件的名称(一个字符串),而新出现的则是open_mode(打开模式)。open_mode的值用来定义以怎样的方式打开文件。下面是打开模式的列表:

名称

描述

ios::in

打开一个可读取文件

ios::out

打开一个可写入文件

ios::app

你写入的所有数据将被追加到文件的末尾,此方式使用ios::out

ios::ate

你写入的所有数据将被追加到文件的末尾,此方式不使用ios::out

ios::trunk

删除文件原来已存在的内容(清空文件)

ios::nocreate

如果要打开的文件并不存在,那么以此参数调用open()函数将无法进行。

ios::noreplace

如果要打开的文件已存在,试图用open()函数打开时将返回一个错误。

ios::binary

以二进制的形式打开一个文件。

原文转自:http://www.ltesting.net