c++如何读取和写入txt文件 使用fstream库实现文件操作【代码示例】

用fstream读写TXT文件需选对流类型并检查打开状态:ifstream逐行读取用getline(),ofstream写入可覆盖或追加,fstream同时读写需指定模式组合并注意seekg/seekp定位。

fstream 读写 TXT 文件,核心是选对流类型(ifstreamofstreamfstream),正确打开文件,并检查是否成功。

读取文本文件(逐行 or 逐词)

推荐用 std::ifstream,配合 std::getline() 逐行读取最稳妥,避免空格截断;若用 >> 运算符则按空白符分隔(空格、制表、换行都会切开)。

示例:读取并打印每行内容

#include 
#include 
#include 

int main() {
    std::ifstream fin("data.txt");
    if (!fin.is_open()) {
        std::cerr << "无法打开 data.txt\n";
        return 1;
    }

    std::string line;
    while (std::getline(fin, line)) {
        std::cout << line << '\n';
    }
    fin.close();
    return 0;
}

写入文本文件(覆盖 or 追加)

std::ofstream。默认是覆盖写入(std::ios::out);要追加,显式加上 std::ios::app 模式。

  • 覆盖写入:直接构造 ofstream("file.txt")
  • 追加写入:ofstream("file.txt", std::ios::app)
  • 写入失败时,可用 !foutfout.fail() 判断

示例:向文件追加两行

#include 
#include 

int main() {
    std::ofstream fout("log.txt", std::ios::app);
    if (!fout) {
        std::cerr << "无法打开 log.txt\n";
        return 1;
    }

    fout << "操作完成\n";
    fout << "时间:2024-06-15\n";
    fout.close();
    return 0;
}

同时读写一个文件(需谨慎)

std::fstream,但必须指定模式组合,例如:

  • std::fstream file("data.txt", std::ios::in | std::ios::out); —— 可读可写,文件必须存在
  • std::fstream file("data.txt", std::ios::in | std::ios::out | std::ios::trunc); —— 读写+清空原内容
  • std::fstream file("data.txt", std::ios::in | std::ios::out | std::ios::ate); —— 打开后定位到末尾

注意:读写切换时需调用 seekg()(读位置)或 seekp()(写位置),否则行为未定义。

常见问题与建议

  • 路径写错或文件权限不足会导致打开失败——务必检查 is_open() 或隐式转换为 bool
  • 中文路径在 Windows 下可能乱码,建议用 UTF-8 编码保存源文件,并考虑使用 _setmode(_fileno(stdin), _O_U16TEXT)(Windows 特有)或改用绝对路径测试
  • 不手动调用 .close() 也行,对象析构时会自动关闭,但显式关闭更清晰可控
  • 读取数字时,fin >> x 遇到非数字字符会停止,且留下剩余字符在缓冲区,后续 getline() 可能读到空行——可用 fin.ignore() 清理