C++中如何操作二进制文件_二进制文件读写方法解析

来源:AI智能体作者:台湾程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《C++中如何操作二进制文件_二进制文件读写方法解析》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C++中如何操作二进制文件_二进制文件读写方法解析》有用,将其分享出去将是对创作者最好的鼓励。

在C++开发中,二进制文件操作是非常实用的技能,它可以直接以字节为单位处理数据,避免了文本文件转换带来的性能损耗和格式偏差,适合存储结构体、数组等结构化数据。

C++中如何操作二进制文件_二进制文件读写方法解析

二进制文件打开模式

操作二进制文件需要使用fstream或者ifstreamofstream类,打开文件时需要指定二进制模式,对应的标识是ios::binary,常见的打开模式组合如下:

  • ios::out | ios::binary:以二进制写模式打开文件,若文件不存在则创建,存在则清空内容
  • ios::in | ios::binary:以二进制读模式打开文件,若文件不存在则打开失败
  • ios::out | ios::in | ios::binary:以二进制读写模式打开文件,可同时进行读写操作

二进制文件写入操作

写入二进制数据需要使用write方法,该方法的第一个参数是待写入数据的指针,需要转换为const char*类型,第二个参数是写入的字节数。

基础数据类型写入示例

以写入一个整数和一个双精度浮点数为例:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    // 以二进制写模式打开文件
    ofstream outFile("test.bin", ios::out | ios::binary);
    if (!outFile.is_open()) {
        cout << "文件打开失败" << endl;
        return 1;
    }
    int num = 100;
    double score = 95.5;
    // 写入整数,sizeof(num)获取字节数
    outFile.write(reinterpret_cast<const char*>(&num), sizeof(num));
    // 写入浮点数
    outFile.write(reinterpret_cast<const char*>(&score), sizeof(score));
    // 关闭文件
    outFile.close();
    cout << "数据写入完成" << endl;
    return 0;
}

自定义结构体写入示例

写入结构体时需要注意结构体是否存在内存对齐问题,若没有特殊对齐设置,可以直接写入整个结构体的字节:

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

// 定义学生结构体
struct Student {
    int id;
    char name[20];
    double grade;
};

int main() {
    ofstream outFile("student.bin", ios::out | ios::binary);
    if (!outFile.is_open()) {
        cout << "文件打开失败" << endl;
        return 1;
    }
    Student stu;
    stu.id = 1;
    strcpy(stu.name, "张三");
    stu.grade = 88.5;
    // 写入整个结构体
    outFile.write(reinterpret_cast<const char*>(&stu), sizeof(Student));
    outFile.close();
    cout << "结构体数据写入完成" << endl;
    return 0;
}

二进制文件读取操作

读取二进制数据需要使用read方法,第一个参数是接收数据的指针,同样需要转换为char*类型,第二个参数是读取的字节数。

基础数据类型读取示例

读取之前写入的整数和浮点数:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    // 以二进制读模式打开文件
    ifstream inFile("test.bin", ios::in | ios::binary);
    if (!inFile.is_open()) {
        cout << "文件打开失败" << endl;
        return 1;
    }
    int num;
    double score;
    // 读取整数
    inFile.read(reinterpret_cast<char*>(&num), sizeof(num));
    // 读取浮点数
    inFile.read(reinterpret_cast<char*>(&score), sizeof(score));
    cout << "读取的整数:" << num << endl;
    cout << "读取的浮点数:" << score << endl;
    inFile.close();
    return 0;
}

结构体数据读取示例

读取之前写入的学生结构体数据:

#include <iostream>
#include <fstream>
using namespace std;

struct Student {
    int id;
    char name[20];
    double grade;
};

int main() {
    ifstream inFile("student.bin", ios::in | ios::binary);
    if (!inFile.is_open()) {
        cout << "文件打开失败" << endl;
        return 1;
    }
    Student stu;
    inFile.read(reinterpret_cast<char*>(&stu), sizeof(Student));
    cout << "学生ID:" << stu.id << endl;
    cout << "学生姓名:" << stu.name << endl;
    cout << "学生成绩:" << stu.grade << endl;
    inFile.close();
    return 0;
}

注意事项

  • 二进制文件读写时不需要进行数据格式转换,所以不同平台之间的二进制文件可能存在兼容性问题,比如大端小端字节序差异、结构体内存对齐差异等
  • 写入字符串时,不建议直接写入string对象,因为string对象内部包含指针,写入的只是指针地址而非字符串内容,应该写入stringc_str()对应的字符数组,或者固定长度的字符数组
  • 操作完文件后要及时调用close方法关闭文件,避免数据没有及时写入磁盘导致丢失
  • 读写前需要检查文件是否成功打开,避免出现空指针操作导致的程序崩溃
二进制文件操作的核心是明确数据的字节长度,只要保证写入和读取的字节数、数据类型一致,就能正确完成数据的存取。

C++二进制文件文件读写fstream修改时间:2026-07-12 03:12:25

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。