标准 C++ 提供提供了一个增强的、面向对象的、具有国际化意识的 <fstream> 库。这个库包含一系列派生于标准 ios_base 和 ios 类的类模板。
输入文件流(ifstream)支持重载的 >> 操作符,同样,输出文件流(ofstream)支持重载的 << 操作符。结合了输入和输出的文件流被称为 fstream。下面的程序创建了一个 ifstream 对象:dict,并将该对象中的每一个单字显示到屏幕上:
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
string s;
cout<<“enter dictionary file: “;
cin>>s;
ifstream dict (s.c_str());
if (!dict)
exit(-1);
while (dict >> s)
cout << s <<‘/n’;
}
我们必须调用 string::c_str() 成员函数,
因为 fstream 对象只接受常量字符串作为文件名
。当你将文件名作为参数传递时,构造函数试图打开指定的文件。注意我们不必显式地检查 EOF,因为重载操作符 >> 会自动处理。此外,
我们不用显式地关闭此文件,因为析构函数会为我们做这件事情
。(比fstream的open()好)
但是
open()
函数是很有用的
ifstream OpenFile;
OpenFile.open(“cpp-home.txt”);
它们之间有什么区别吗?哦,我曾做了不少测试,结论是没有区别!只不过如果你要创建一个文件句柄但不想立刻给它指定一个文件名,那么你可以使用
open()
函数过后进行指定。顺便再给出一个要用
open()
函数的例子:如果你打开一个文件,然后关闭了它,又打算用同一个文件句柄打开另一个文件,这样,你将需要使用
open()
函数。
以前的 <fstream.h> 库支持 ios::nocreate 和 ios::noreplace 标志。但新的 <fstream> 库已经取代了 <fstream.h> 并不再支持这两个标志。
注意,fstream只是打开文件,如果文件不存在的话并不会创建它,
如果你不显式指定打开模式,fstream 类将使用默认值。例如,ifstream 默认以读方式打开某个文件并将文件指针置为文件的开始处。为了向某个文件写入数据,你需要创建一个 ofstream 对象。<fstream> 定义了下列打开模式和文件属性:
ios::app // 从后面添加 ios::ate // 打开并找到文件尾 ios::binary // 二进制模式 I/O (与文本模式相对) ios::in // 只读打开 ios::out // 写打开 ios::trunc // 将文件截为 0 长度
你可以用位域操作符 OR 组合这些标志:
ofstream logfile(“login.dat”, ios::b