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

#include

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

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

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(&number), sizeof(number)); // 写入二进制数据

file.close();

return 0;

}

🔹 说明

std::ios::binary 以 二进制 方式打开文件,适用于非文本数据。

file.write(reinterpret_cast(&number), sizeof(number)); 直接写入数据的 二进制表示。

4️⃣ 使用 fstream 进行读写

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

cpp

复制代码

#include

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

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

#include

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/O → write()(适用于大文件或性能关键场景)