Skip to content

文件输入输出 ​

核心类 ​

C++ 文件 I/O 主要使用以下三个类:

类名功能说明对应流方向
ifstream用于从文件读取数据(输入)输入流
ofstream用于向文件写入数据(输出)输出流
fstream可同时用于读写文件(需指定模式)输入/输出

基本操作 ​

cpp
// 1. 包含头文件
#include <fstream>

// 2. 创建流对象
std::ifstream in; 	// 读文件
std::ofstream out;	// 写文件
std::fstream file;	// 读写文件

// 3. 打开文件(可选,也可在构造时打开)
in.open("input.txt");
out.open("output.txt");
file.open("data.txt", std::ios::in | std::ios::out);

// 4. 检查是否成功打开
if (!in.is_open()) {
	std::cerr << "无法打开文件!\n";
	return -1;
}

// 5. 关闭文件
in.close();
out.close();
file.close();
  • 使用 >>、getline()、read() 等进行读取;
  • 使用 <<、write() 等进行写入。

常用打开模式 ​

模式说明
ios::in以输入(读)方式打开
ios::out以输出(写)方式打开(默认情况文件)
ios::app以追加方式写入(不清空,写到末尾)
ios::ate打开后定位到文件末尾
ios::trunc若文件存在则情况内容(默认 out 含此)
ios::binary以二进制模式打开(非文本)

示例代码 ​

1. 文本文件写入 ​

cpp
#include <fstream>
#include <iostream>
int main() {
    std::ofstream out("hello.txt");
    if (out.is_open()) {
        out << "Hello, File I/O in C++!\n";
        out.close();
    }
    return 0;
}

2. 文本文件读取 ​

cpp
#include <fstream>
#include <iostream>
#include <string>
int main() {
    std::ifstream in("hello.txt");
    std::string line;
    if (in.is_open()) {
        while (std::getline(in, line)) {
            std::cout << line << '\n';
        }
        in.close();
    }
    return 0;
}

3. 二进制文件读写 ​

cpp
// 写入二进制
std::ofstream binOut("data.bin", std::ios::binary);
int num = 42;
binOut.write(reinterpret_cast<char*>(&num), sizeof(num));
binOut.close();

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