使用fstream类以binary模式读写二进制文件,通过write()和read()函数配合sizeof操作数据,可直接处理基本类型和结构体,但需注意内存对齐、指针成员及流状态检查,确保跨平台兼容性和操作正确性。

在C++中操作二进制文件,主要使用fstream类,并通过指定模式来实现读写。与文本文件不同,二进制文件以原始字节形式存储数据,适合保存结构体、数组或非文本信息,比如图像、音频或程序状态。
使用std::ifstream读取,std::ofstream写入,或std::fstream同时读写。关键是在打开时加上std::ios::binary标志。
#include <fstream>
std::ofstream outFile("data.bin", std::ios::binary);
std::ifstream inFile("data.bin", std::ios::binary);
使用write()函数将内存中的数据按字节写入文件。参数是数据地址和字节数。
int value = 1234;
double arr[] = {1.1, 2.2, 3.3};
outFile.write(reinterpret_cast<const char*>(&value), sizeof(value));
outFile.write(reinterpret_cast<const char*>(arr), sizeof(arr));
注意:reinterpret_cast用于将任意类型指针转为char*,这是二进制I/O的标准做法。
立即学习“C++免费学习笔记(深入)”;
使用read()函数从文件读取指定字节数到变量中,需确保目标内存足够。
int readValue; double readArr[3]; inFile.read(reinterpret_cast<char*>(&readValue), sizeof(readValue)); inFile.read(reinterpret_cast<char*>(readArr), sizeof(readArr));
可调用gcount()查看上次read()实际读取的字节数。
直接读写结构体很方便,但要注意内存对齐和跨平台兼容性问题。
struct Person {
int age;
double height;
char name[32];
};
Person p{25, 1.78, "Alice"};
outFile.write(reinterpret_cast<const char*>(&p), sizeof(p));
Person loaded;
inFile.read(reinterpret_cast<char*>(&loaded), sizeof(loaded));
简单场景可行,若含指针或STL容器(如std::string),需序列化处理。
每次读写后建议检查流状态,避免出错。
good():一切正常fail():操作失败eof():到达文件末尾bad():发生严重错误
if (!inFile.read(reinterpret_cast<char*>(&value), sizeof(value))) {
// 处理读取失败
}
基本上就这些。只要记住用binary模式,配合read/write和sizeof,就能高效操作二进制文件。不复杂但容易忽略细节,比如类型大小一致性或文件关闭。记得及时close()文件流。基本上就这些。
以上就是C++如何读写二进制文件_C++ 二进制文件读写方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号