文件输入输出
核心类
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();