c++学习系列----002.写文件

c++ 写文件

文章目录

  • [c++ 写文件](#c++ 写文件)
    • [1️⃣ 使用 `ofstream` 写入文本文件](#1️⃣ 使用 ofstream 写入文本文件)
    • [2️⃣ 追加模式写入](#2️⃣ 追加模式写入)
    • [3️⃣ 写入二进制文件](#3️⃣ 写入二进制文件)
    • [4️⃣ 使用 `fstream` 进行读写](#4️⃣ 使用 fstream 进行读写)
    • [5️⃣ 使用 `fprintf()`(C 方式)](#5️⃣ 使用 fprintf()(C 方式))
    • [6️⃣ 使用 `write()` 低级 I/O 方式](#6️⃣ 使用 write() 低级 I/O 方式)
    • 推荐方式

C++ 写文件的几种方式主要有以下几种:

方式 适用场景 示例
std::ofstream 文本写入 file << "text"
std::ofstream (std::ios::app) 追加文本 file << "text"
std::ofstream (std::ios::binary) 二进制写入 file.write(data, size)
std::fstream 读写模式 file << "text"
fprintf() (C方式) C风格写入 fprintf(file, "text")
write() (低级I/O) 高效文件操作 write(fd, data, size)

1️⃣ 使用 ofstream 写入文本文件

最常见的方法,适用于写入纯文本数据。

cpp 复制代码
#include <iostream>
#include <fstream>

int main() {
    std::ofstream file("output.txt");  // 打开文件进行写入(默认会覆盖原文件)
    if (!file) {
        std::cerr << "无法打开文件!" << std::endl;
        return 1;
    }

    file << "Hello, World!" << std::endl;  // 写入文本
    file.close();  // 关闭文件

    return 0;
}

🔹 说明

  • std::ofstream file("output.txt"); 打开文件,默认覆盖原文件内容。
  • file << "Hello, World!" << std::endl;流式 方式写入数据。

2️⃣ 追加模式写入

在文件末尾追加内容,不覆盖原有内容,使用 std::ios::app

cpp 复制代码
#include <fstream>

int main() {
    std::ofstream file("output.txt", std::ios::app);  // 追加模式
    if (file) {
        file << "追加内容..." << std::endl;
    }
    file.close();
    return 0;
}

🔹 说明

  • std::ios::app 追加模式,不会清空原文件,写入内容会添加到末尾。

3️⃣ 写入二进制文件

使用 std::ios::binary 以二进制模式写入文件(适用于写入结构体、图片、音频等)。

cpp 复制代码
#include <fstream>

int main() {
    std::ofstream file("data.bin", std::ios::binary);  // 以二进制模式打开
    if (!file) {
        std::cerr << "无法打开文件!" << std::endl;
        return 1;
    }

    int number = 12345;
    file.write(reinterpret_cast<char*>(&number), sizeof(number));  // 写入二进制数据
    file.close();

    return 0;
}

🔹 说明

  • std::ios::binary二进制 方式打开文件,适用于非文本数据。
  • file.write(reinterpret_cast<char*>(&number), sizeof(number)); 直接写入数据的 二进制表示

4️⃣ 使用 fstream 进行读写

std::fstream 既可以读也可以写,适用于需要修改文件的情况。

cpp 复制代码
#include <fstream>

int main() {
    std::fstream file("output.txt", std::ios::in | std::ios::out | std::ios::app);
    if (!file) {
        std::cerr << "无法打开文件!" << std::endl;
        return 1;
    }

    file << "这是一个可以读写的文件!" << std::endl;
    file.close();

    return 0;
}

🔹 说明

  • std::ios::in | std::ios::out | std::ios::app可读可写 ,并且追加模式

5️⃣ 使用 fprintf()(C 方式)

C 语言的 FILE*,可以使用 fprintf()

cpp 复制代码
#include <cstdio>

int main() {
    FILE* file = fopen("output.txt", "w");  // "w" 代表写模式,覆盖原文件
    if (!file) {
        perror("无法打开文件");
        return 1;
    }

    fprintf(file, "Hello, World!\n");  // 格式化写入
    fclose(file);  // 关闭文件

    return 0;
}

🔹 说明

  • fopen("output.txt", "w") 以写模式打开文件(覆盖原内容)。
  • fprintf(file, "Hello, World!\n") 格式化写入,类似 printf()
  • fclose(file); 关闭文件,避免资源泄漏。

追加写入,可以改为:

cpp 复制代码
FILE* file = fopen("output.txt", "a");  // "a" 追加模式

6️⃣ 使用 write() 低级 I/O 方式

write() 是 POSIX 系统(如 Linux)中的低级 I/O 操作,可以提高效率。

cpp 复制代码
#include <fcntl.h>
#include <unistd.h>

int main() {
    int fd = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1) {
        perror("无法打开文件");
        return 1;
    }

    const char* text = "Hello, World!\n";
    write(fd, text, 14);  // 低级写入
    close(fd);  // 关闭文件

    return 0;
}

🔹 说明

  • open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644)写模式 打开或创建文件。
  • write(fd, text, 14); 直接写入 字节流
  • close(fd); 关闭文件。

推荐方式

  • 一般文本写入std::ofstream
  • 追加模式std::ofstream + std::ios::app
  • 二进制文件std::ofstream + std::ios::binary
  • 需要读写std::fstream
  • 低级 I/Owrite()(适用于大文件或性能关键场景)
相关推荐
冷崖7 分钟前
const 与 constexpr
c++·学习
wenjie学长14 分钟前
[UE学习笔记]—划时代意义的两大功能—lumen和Nanite
笔记·学习·ue·三维数字化
好奇龙猫15 分钟前
日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(6):文法運用
学习
文火冰糖的硅基工坊19 分钟前
[人工智能-大模型-43]:模型层技术 - 强化学学习:学习的目标、收敛条件、评估依据、应用到的模型、应用场景 - 通俗易懂。
人工智能·学习
枫叶丹434 分钟前
【Qt开发】多元素类控件(三)-> QTreeWidget
开发语言·数据库·c++·qt
晨非辰38 分钟前
【数据结构入坑指南】--《层序分明:堆的实现、排序与TOP-K问题一站式攻克(源码实战)》
c语言·开发语言·数据结构·算法·面试
hansang_IR1 小时前
【题解】P2217 [HAOI2007] 分割矩阵 [记忆化搜索]
c++·数学·算法·记忆化搜索·深搜
洲覆1 小时前
Redis 驱动适配 Reactor 模式
开发语言·网络·数据库·redis
fl1768311 小时前
基于matlab实现的DnCNN网络
开发语言·matlab
第二层皮-合肥1 小时前
如何设置等长的最大走线长度
服务器·开发语言·php