文本文件(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)