C++基础--文件流

 
利用文件流操作打开一个文件,只需要建立一个对象,它的构造函数负责打开文件,当该对象生存期结束时,它会调用析构函数关闭文件。当然,我们也可以调用成员函数open()和close()进行文件的打开和关闭,下面这个例子说明了如何用文件流进行文件操作。
  文件流类其实是输入输出流类的一部分,由于在实际中,会经常用到文件操作,所以我们把文件流类再单独介绍。

一、打开文件
  用文件流打开文件可以利用无参的构造函数,然后调用open():
  ofstream outfile;
  outfile.open("outfile", iosmode);
  也可调用带参数的构造函数,指定文件名和打开方式:
  ofstream outfile("outfile", iosmode);
文件打开方式由下面几种:
表格表12-7
ios::in打开一个输入文件,用这个标志作为ifstream的打开方式,以防止截断一个现成的文件
ios::out打开一个输出文件,当用于一个没有ios::app、ios::ate或ios::in的ofstream时,ios::trunc被隐含
ios::app以追加的方式打开一个输出文件
ios::ate打开一现成文件(不论是输入还是输出)并寻找末尾
ios::nocreate仅打开一个存在的文件(否则失败)
ios::noreplace仅打开一个不存在的文件(否则失败)
ios::trunc如果一个文件存在,打开它并删除旧的文件
ios::binary打开一个二进制文件,缺省的是文本文件
  这些标志可以通过逐位或(|)运算来连接。
  ios类中定义的文件打开方式:
程序段程序12-15
// stream operation mode
enum open_mode {
 in = 0x01, // open for reading
 out = 0x02, // open for writing
 ate = 0x04, // seek to eof upon original open
 app = 0x08, // append mode: all additions at eof
 trunc = 0x10, // truncate file if already exists
 nocreate = 0x20, // open fails if file doesn't exist
 noreplace= 0x40, // open fails if file already exists
 binary = 0x80 // binary (not text) file
};
  它们可以用逐位或(|)运算符来连接。例如,下面的语句用来打开一个文件用于输出,并确保它以前是不存在的:
  ofstream outfile("outfile", ios::out|ios::noreplace);
  当文件打开失败时,文件流对象的bad标志会置位。可以使用ios类成员函数clear清除标志位,然后重新操作。
二、文件操作
  由于iostream的设备无关性,构造了文件流以后,就可以象前面标准输入输出流的方法一样使用了。
三、关闭文件
  在文件操作结束时,可以用close()成员函数关闭该文件。
  Outfile.close();
  不过,在该文件流对象生存期结束时,对象也会自动调用析构函数来关闭文件。最好在文件操作结束时,关闭文件,这样会使程序的可读性更好。
程序12-16
outfile<<"hello world"<<name<<endl;
infile>>pi>>a>>complex;
outfile.write(buf,80);
infile.getline(buf,80);
  需要注意的是:文件操作不能超过该文件打开方式设定的权限。
  如果查看fstream.h,可以会发现:类ifstream和ofstream仅仅定义了一些必要的构造函数、open()和close()。这说明它们继承了istream和ostream负责具体操作的成员函数。也就是说,文件操作和前面讲的标准流操作是完全一样的。但是,如果文件操作超过该文件打开方式设定的权限,比如试图向一个输出文件流中输入数据,那么该文件流的bad标志会置位。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值