fstream文件操作(更新中)

  • Post author:
  • Post category:其他


标准 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



版权声明:本文为PlusA原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。