C++文件读写详解(ofstream,ifstream,fstream)

本文详细介绍了C++中fstream类及其子类ofstream和ifstream的基本用法,包括如何打开、读取、写入及关闭文件等内容。此外,还探讨了状态标志符的验证方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里主要是讨论fstream的内容:

  1. #include <fstream>  
  2. ofstream         //文件写操作 内存写入存储设备   
  3. ifstream         //文件读操作,存储设备读区到内存中  
  4. fstream          //读写操作,对打开的文件可进行读写操作  

1.打开文件

在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作

很多程序中,可能会碰到ofstream out("Hello.txt"), ifstream in("..."),fstream foi("...")这样的的使用,并没有显式的去调用open()函数就进行文件的操作,直接调用了其默认的打开方式,因为在stream类的构造函数中调用了open()函数,并拥有同样的构造函数,所以在这里可以直接使用流对象进行文件的操作,默认方式如下:

  1. <span style="font-family:'Times New Roman';font-size:16px;">  
  2. ofstream out("...", ios::out);  
  3. ifstream in("...", ios::in);  
  4. fstream foi("...", ios::in|ios::out);  
  5.   
  6. </span>

2.关闭文件

当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。成员函数close(),它负责将缓存中的数据排放出来并关闭文件。这个函数一旦被调用,原先的流对象就可以被用来打开其它的文件了,这个文件也就可以重新被其它的进程所访问了。为防止流对象被销毁时还联系着打开的文件,析构函数将会自动调用关闭函数close。

类ofstream, ifstream 和fstream 是分别从ostream, istream 和iostream 中引申而来的。这就是为什么 fstream 的对象可以使用其父类的成员来访问数据。

一般来说,我们将使用这些类与同控制台(console)交互同样的成员函数(cin 和 cout)来进行输入输出。如下面的例题所示,我们使用重载的插入操作符<<:

  1.   // writing on a text file  
  2.  #include <fiostream.h>  
  3.  int main () {  
  4.      ofstream out("out.txt");  
  5.      if (out.is_open())   
  6.     {  
  7.          out << "This is a line.\n";  
  8.          out << "This is another line.\n";  
  9.          out.close();  
  10.      }  
  11.      return 0;  
  12.  }  
  13. //结果: 在out.txt中写入:  
  14. This is a line.  
  15. This is another line   

从文件中读入数据也可以用与 cin>>的使用同样的方法:

  1. // reading a text file  
  2.    #include <iostream.h>  
  3.    #include <fstream.h>  
  4.    #include <stdlib.h>  
  5.      
  6.    int main () {  
  7.        char buffer[256];  
  8.        ifstream in("test.txt");  
  9.        if (! in.is_open())  
  10.        { cout << "Error opening file"; exit (1); }  
  11.        while (!in.eof() )  
  12.        {  
  13.            in.getline (buffer,100);  
  14.            cout << buffer << endl;  
  15.        }  
  16.        return 0;  
  17.    }  
  18.    //结果 在屏幕上输出  
  19.     This is a line.  
  20.     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(),没有参数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值