第8章 标准IO库(4)

8.4 文件的输入和输出
fstream头文件定义了三种支持文件IO的类型:
(1) ifstream,由istream派生而来,提供读文件的功能。
(2) ofstream,由ostream派生而来,提供写文件的功能。
(3) fstream,由iostream派生而来,提供读写同一个文件的功能。
可使用IO操作符(<<和>>)在文件上实现格式化的IO。
fstream类型除了继承下来的行为外,还定义了两个自己的新操作——open和close,以及形参为要打开的文件名的构造函数。
8.4.1 文件流对象的使用
需要读写文件时,则必须定义自己的对象,并将它们绑定在需要的文件中。
string file("path");
ifstream fcin(file.c_str());
ofstream fout(file.c_str());
为ifstream或者ofstream对象提供文件名作为初始化式,就相当于打开了特定的文件。
string file("");
ifstream fcin;
ofstream fout;
fcin.open(file.c_str());
fout.open(file.c_str());
调用open成员函数将已存在的fstream对象与特定文件绑定。为了实现读写,需要将指定的文件打开并定位,open函数完成系统指定的所有需要的操作。
由于历史原因,IO标准库使用C风格字符串而不是C++string类型的字符串作为文件名。在创建fstream对象时,如果调用open或使用文件名作初始化式,需要传递的实参应为C风格字符串,而不是标准库string对象。程序常常从标准输入获得文件名。通常比较好的方法是将文件名读入string对象,而不是C风格字符数组。假设要使用的文件名保存在string对象中,则可调用c_str成员获取C风格字符串。
1. 检查文件打开是否成功
string file("C:\\Documents and Settings\\10170660\\Desktop\\AssetHttpHandler.py");
ofstream fout;
fout.open(file.c_str());
if(!fout)
{
cerr << "error: unable to open input file:" << fout << endl;
return -1;
}
return 0;
检查流等效于检查对象是否“适合”输入或输出。如果打开(open)失败,则说明fstream对象还没有为IO做好准备。
2. 将文件流与新文件重新捆绑
fstream对象一旦打开,就保持与指定的文件相关联。如果要把fstream对象与另一个不同的文件关联,则必须先关闭(close)现在的文件,然后打开(open)另一个文件。
string file1("C:\\Documents and Settings\\10170660\\Desktop\\readTextFile.py");
fout.close();
fout.open(file1.c_str());
if(!fout)
{
cerr << "error: unable to open input file:" << fout << endl;
return -1;
}
尝试打开新文件之前,必须先关闭当前的文件流。open函数会检查流是否已经打开。如果已经打开,则设置内部状态,以指出发生了错误。接下来使用文件流的任何尝试都会失败。
3. 清除文件流的状态
调用clear后,就像重新创建了该对象一样。
如果打算重用已存在的流对象,那么while循环必须在每次循环时记得关闭(close)和清空(clear)文件流。
ifstream input;
vector<string> files;
vector<string>::const_iterator it = files.begin();
while(it!=files.end())
{
input.open(it -> c_str());
input.close();
input.clear();
}
如果程序员需要重用文件流读写多个文件,必须在读另一个文件之前调用clear清除该流的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值