background image

文本文件(Text mode files)

类 ofstream, ifstream 和 fstream 是分别从 ostream, istream 和 iostream 中引申而

 

来的。这就是为什么 fstream 的对象可以使用其父类的成员来访问数据。

一般来说,我们将使用这些类与同控制台(console)交互同样的成员函数(cin   

和 cout)来

进行输入输出。如下面的例题所示,我们使用重载的插入操作符<<:

// writing on a text file
#include <fiostream.h>

int main () {
ofstream examplefile ("example.txt");

if (examplefile.is_open()) {
examplefile << "This is a line.\n";

examplefile << "This is another line.\n";
examplefile.close();

}
return 0;

}
 file example.txt 

This is a line.
This is another line. 

 

 

从文件中读入数据也可以用与 cin 的使用同样的方法:

// reading a text file
#include <iostream.h>

#include <fstream.h>
#include <stdlib.h>

int main () {
char buffer[256];

ifstream examplefile ("example.txt");
if (! examplefile.is_open())

{ cout << "Error opening file"; exit (1); }
while (! examplefile.eof() ) {

examplefile.getline (buffer,100);
cout << buffer << endl;

}
return 0;

}
 This is a line. 

This is another line. 
 

上面的例子读入一个文本文件的内容,然后将它打印到屏幕上。注意我们使用了一个新
的成员函数叫做 eof ,它是 ifstream 

 

从类 ios 中继承过来的,当到达文件末尾时返回

true 。

状态标志符的验证(Verification of state flags)

除了 eof()以外,还有一些验证流的状态的成员函数(所有都返回 bool 型返回值):
bad() 

 

如果在读写过程中出错,返回 true 。例如:当我们要对一个不是打开为写状态的文件进

行写入时,或者我们要写入的设备没有剩余空间的时候。
fail() 

除了与 bad() 

 

同样的情况下会返回 true 以外,加上格式错误时也返回 true ,例如当想

要读入一个整数,而获得了一个字母的时候。
eof() 

如果读文件到达文件末尾,返回 true。
good() 

这是最通用的:如果调用以上任何一个函数返回 true 

 

的话,此函数返回 false 。

要想重置以上成员函数所检查的状态标志,你可以使用成员函数 clear(),没有参数。

获得和设置流指针(get and put stream pointers)