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
file.close();
return 0;
}
🔹 说明
std::ios::binary 以 二进制 方式打开文件,适用于非文本数据。
file.write(reinterpret_cast
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()(适用于大文件或性能关键场景)