C++的文件和流的常用成员函数

目录

公共成员函数

构造函数

打开和关闭文件

文件状态

读操作

写操作

定位

文件流位置

错误处理

其他

示例

私有成员和保护成员


         在 C++ 中,fstreamifstreamofstream 是用于文件输入输出操作的类,它们都是从 iostream 类继承而来的,因此具有类似的方法和功能。

公共成员函数

  1. 构造函数

    • fstream():默认构造函数,创建一个未关联任何文件的文件流对象。
    • fstream(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out):构造函数,打开指定文件并关联到文件流对象。
    • ifstream(const char* filename, ios_base::openmode mode = ios_base::in):构造函数,用于打开一个输入文件流对象。
    • ofstream(const char* filename, ios_base::openmode mode = ios_base::out):构造函数,用于打开一个输出文件流对象。
  2. 打开和关闭文件

    • open(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out):打开指定文件并关联到文件流对象。
    • close():关闭关联的文件。
  3. 文件状态

    • is_open():检查文件流是否已打开。
    • good():检查文件流状态是否为 goodbit,表示文件操作正常。
    • eof():检查文件流是否已到达文件末尾。
    • fail():检查文件流状态是否为 failbit,表示文件操作失败。
    • bad():检查文件流状态是否为 badbit,表示文件流处于不可恢复状态。
  4. 读操作

    • operator>>(), getline(), read(), get():用于从文件读取数据。
  5. 写操作

    • operator<<(), write(), put():用于向文件写入数据。
  6. 定位

    • seekg(pos)seekg(pos, mode):定位输入位置。
    • seekp(pos)seekp(pos, mode):定位输出位置。
  7. 文件流位置

    • tellg():获取当前输入位置。
    • tellp():获取当前输出位置。
  8. 错误处理

    • clear():清除文件流的错误标志。
    • setstate(state):设置文件流的状态。
    • rdstate():获取文件流的状态。
  9. 其他

    • flush():刷新输出缓冲区。
    • rdbuf():返回与流关联的 streambuf 对象。

示例

下面是一个简单的示例,展示了如何使用 ifstreamofstream 对象来读取和写入文件:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
    // 写文件
    ofstream outFile("output.txt");
    if (outFile.is_open()) {
        outFile << "Hello, World!" << endl;
        outFile << 123 << endl;
        outFile.close();
    } else {
        cerr << "Error opening output file" << endl;
        return 1;
    }

    // 读文件
    ifstream inFile("input.txt");
    if (inFile.is_open()) {
        string line;
        while (getline(inFile, line)) {
            cout << "Read from file: " << line << endl;
        }
        inFile.close();
    } else {
        cerr << "Error opening input file" << endl;
        return 1;
    }

    return 0;
}

在这个示例中,程序打开一个名为 output.txt 的输出文件流,并向文件写入字符串和数字。然后,程序打开一个名为 input.txt 的输入文件流,并从文件中逐行读取数据并打印到控制台上。

根据具体需求和场景,使用适当的文件流对象(fstreamifstreamofstream)来实现文件的读写操作,并根据返回值和文件流的状态来进行错误处理和异常处理。


私有成员和保护成员

  1. rdbuf()

    • basic_filebuf<char_type, traits_type>* rdbuf() const;
    • 返回与流关联的 basic_filebuf 对象指针,它负责管理文件的底层缓冲区和文件操作。
  2. buffer_type

    • typedef basic_filebuf<char_type, traits_type> buffer_type;
    • 定义流的缓冲区类型,用于管理流的输入和输出。
  3. filebuf

    • filebuf()open()close() 等函数和方法,用于实际的文件 I/O 操作。
  4. failbiteofbitbadbit

    • 定义了流的状态位,用于指示流的状态,包括操作失败、到达文件末尾、流处于不可恢复的错误状态等。
  5. ios_base::openmode

    • 枚举类型,用于指定文件打开模式(读、写、追加等),是文件流构造函数和 open() 函数的参数之一。
  6. basic_ios

    • fstreamifstreamofstream 类的基类,定义了流的基本状态和操作,包括流的状态标志、错误状态等。
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值