C++(20): 文件输入输出库 —— <fstream>

目录

[一、 的核心功能](#一、 的核心功能)

二、核心类及功能

三、核心操作示例

[1. 文本文件写入(ofstream)](#1. 文本文件写入(ofstream))

[2. 文本文件读取(ifstream)](#2. 文本文件读取(ifstream))

[3. 二进制文件操作(fstream)](#3. 二进制文件操作(fstream))

四、文件打开模式

五、文件指针操作

六、错误处理技巧

七、实际应用场景


一、<fstream> 的核心功能

<fstream> 是 C++ 标准库中处理文件输入输出的关键组件,提供以下核心功能:

文本/二进制文件读写、文件流状态管理、文件指针定位、多种文件打开模式控制


二、核心类及功能

类名 继承关系 功能描述 典型用途
ofstream 继承自 ostream 输出文件流(写操作) 创建/覆盖文件内容
ifstream 继承自 istream 输入文件流(读操作) 读取文件内容
fstream 继承自 iostream 双向文件流(读写操作) 同时读写文件

三、核心操作示例

1. 文本文件写入(ofstream)
cpp 复制代码
#include <fstream>

int main() {
    std::ofstream outFile("data.txt");  // 自动打开文件

    if (outFile) {  // 检查是否打开成功
        outFile << "Line 1: 文本内容\n";    // 写入字符串
        outFile << "Line 2: " << 42 << "\n"; // 写入混合数据
        outFile << 3.14 << "\n";            // 写入浮点数
    } else {
        std::cerr << "文件打开失败!";
    }
    // 文件会在对象销毁时自动关闭
    return 0;
}

生成文件内容:

cpp 复制代码
Line 1: 文本内容
Line 2: 42
3.14

2. 文本文件读取(ifstream)
cpp 复制代码
#include <fstream>
#include <iostream>

int main() {
    std::ifstream inFile("data.txt");
    
    if (inFile.is_open()) {
        std::string line;
        while (std::getline(inFile, line)) {  // 逐行读取
            std::cout << "读取内容: " << line << "\n";
        }
    } else {
        std::cerr << "文件不存在!";
    }
    return 0;
}

输出结果:

cpp 复制代码
读取内容: Line 1: 文本内容
读取内容: Line 2: 42
读取内容: 3.14

3. 二进制文件操作(fstream)
cpp 复制代码
#include <fstream>
#include <iostream>

struct DataPacket {
    int id;
    double value;
    char tag[20];
};

int main() {
    // 写入二进制数据
    DataPacket data{1001, 3.1415926, "binary"};
    std::ofstream binOut("data.bin", std::ios::binary);
    binOut.write(reinterpret_cast<char*>(&data), sizeof(data));

    // 读取二进制数据
    DataPacket loaded;
    std::ifstream binIn("data.bin", std::ios::binary);
    binIn.read(reinterpret_cast<char*>(&loaded), sizeof(loaded));

    std::cout << "ID: " << loaded.id 
              << "\nValue: " << loaded.value 
              << "\nTag: " << loaded.tag;
    return 0;
}

输出结果:

cpp 复制代码
ID: 1001
Value: 3.14159
Tag: binary

四、文件打开模式

通过位或操作符 | 组合使用多种模式:

cpp 复制代码
std::fstream file("data.txt", 
                 std::ios::in |     // 可读
                 std::ios::out |    // 可写
                 std::ios::app |    // 追加模式
                 std::ios::binary); // 二进制模式
模式标志 功能描述
std::ios::in 以读取模式打开文件
std::ios::out 以写入模式打开文件
std::ios::app 追加模式(不覆盖原有内容)
std::ios::ate 打开时定位到文件末尾
std::ios::trunc 如果文件存在则清空内容
std::ios::binary 以二进制模式操作文件

五、文件指针操作

cpp 复制代码
std::fstream file("data.txt", std::ios::in | std::ios::out);

// 定位到第10字节处
file.seekg(10, std::ios::beg);  // 输入指针(读取位置)
file.seekp(10, std::ios::beg);  // 输出指针(写入位置)

// 获取当前指针位置
std::streampos readPos = file.tellg();
std::streampos writePos = file.tellp();

六、错误处理技巧

cpp 复制代码
std::ifstream file("missing.txt");

// 检查文件状态
if (file.fail()) {
    std::cerr << "错误代码: " << errno << std::endl;
}

// 重置错误状态
file.clear();

七、实际应用场景

  1. 配置文件读写 :使用文本模式处理 .ini 文件

  2. 数据持久化:用二进制格式保存游戏进度

  3. 日志系统:用追加模式记录程序运行日志

  4. 大数据处理:通过文件指针随机访问大型数据文件


通过以上示例和说明,可以全面掌握 <fstream> 库的核心用法。实际开发中需注意:

  1. 二进制操作时确保数据的内存布局一致

  2. 文件路径使用绝对路径或正确相对路径

  3. 及时处理文件流的状态异常

相关推荐
漫路在线16 分钟前
JS逆向-某易云音乐下载器
开发语言·javascript·爬虫·python
先做个垃圾出来………43 分钟前
哈夫曼树(Huffman Tree)
数据结构·算法
小辉懂编程44 分钟前
C语言:51单片机实现数码管依次循环显示【1~F】课堂练习
c语言·开发语言·51单片机
醍醐三叶2 小时前
C++类与对象--2 对象的初始化和清理
开发语言·c++
phoenix@Capricornus2 小时前
反向传播算法——矩阵形式递推公式——ReLU传递函数
算法·机器学习·矩阵
Magnum Lehar3 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
Inverse1623 小时前
C语言_动态内存管理
c语言·数据结构·算法
数据与人工智能律师3 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
Mcworld8573 小时前
java集合
java·开发语言·windows
成功人chen某3 小时前
配置VScodePython环境Python was not found;
开发语言·python