c++ 写文件
文章目录
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
写入文本文件
最常见的方法,适用于写入纯文本数据。
#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
。
#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
以二进制模式写入文件(适用于写入结构体、图片、音频等)。
#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
既可以读也可以写,适用于需要修改文件的情况。
#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()
:
#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);
关闭文件,避免资源泄漏。
追加写入,可以改为:
FILE* file = fopen("output.txt", "a"); // "a" 追加模式
6️⃣ 使用 write()
低级 I/O 方式
write()
是 POSIX 系统(如 Linux)中的低级 I/O 操作,可以提高效率。
#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/O →
write()
(适用于大文件或性能关键场景)