全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++中如何进行二进制文件读写_c++ read与write函数用法

必须使用ios::binary标志读写二进制文件,正确检查gcount()和fail(),控制结构体填充并统一字节序,否则数据会损坏。

直接用 read()write() 读写二进制文件必须用 ios::binary

不加这个标志,read()write() 在 Windows 下会把 \x0A(LF)和 \x0D\x0A(CRLF)互相转换,导致二进制数据损坏。Linux/macOS 虽然影响小,但行为不一致,必须统一加。

  • std::ifstreamstd::ofstream 构造时传入 std::ios::binary
  • 不能只靠 open() 后再调用 setf(std::ios::binary) —— 这个调用无效
  • 如果同时要读写,用 std::fstream 并带上 ios::in | ios::out | ios::binary

read()write() 的参数是 char* 和字节数,不是对象引用

它们不识别类型,只按字节搬运。想写一个 int 或结构体,必须取地址并转成 char*,且确保内存布局安全(比如没虚函数、没非 POD 成员)。

  • 写一个 int x = 42file.write(reinterpret_cast(&x), sizeof(x))
  • 读回:file.read(reinterpret_cast(&x), sizeof(x))
  • 结构体可读写前提是 std::is_trivially_copyable_vtrue(大多数纯数据 struct 满足)
  • 千万别传 std::stringstd::vector 本体——它们内部指针不会被序列化

务必检查 gcount()fail(),不能只看 eof()

read() 可能因文件末尾、磁盘错误或权限问题提前终止,gcount() 返回**实际读取字节数**,它可能小于你请求的长度;fail() 在出错后才置位,eof() 只表示上次操作碰到了结尾,不是当前状态。

  • 写操作同样要检查:if (!file) { /* 写失败 */ }
  • 读循环典型写法:
    while (file.read(buf, sizeof(buf))) {
        size_t n = file.gcount();
        // 处理 n 字节
    }
    if (file.fail() && !file.eof()) {
        // 真正出错了
    }
  • 不要用 while (!file.eof()) 控制读循环——它会导致多读一次失败

跨平台二进制文件要注意字节序和结构体填充

即使你正确用了 ios::binary,在 x86(小端)和 ARM(可能大端)之间传输文件,或者不同编译器对同一 struct 的 padding 不同,都会让读出来的值错乱。

  • 基础类型如 int32_tuint16_t 可减少歧义,但仍需约定字节序(推荐网络序:用 htons()/htonl() 写,ntohs()/ntohl() 读)
  • struct 读写前用 #pragma pack(1) 强制紧凑排列(但注意性能损失和对齐访问异常风险)
  • 更可靠的做法是定义明确的序列化格式(如 Protocol Buffers),而不是裸写内存

二进制 I/O 表面简单,但 ios::binary 忘加、gcount() 不查、结构体 padding 不控、字节序不处理——这四点踩中任意一个,文件就可能无声无息地损坏。


# linux  # windows  # 字节  # mac  # ai  # c++  # ios  # macos  # win  # stream  # 一加  # cos  # 排列  # EOF  # String  # if  # while  # 结构体  # char  # int  # 循环  # 指针  # 虚函数  # ofstream  # ifstream  # fstream  # Struct  # 对象  # padding  # 序列化  # 错了  # 要注意  # 用了  # 会让  # 会把  # 只看  # 它会  # 后才  # 不加 


相关文章: 建站之星如何防范黑客攻击与数据泄露?  非常酷的网站设计制作软件,酷培ai教育官方网站?  想学网站制作怎么学,建立一个网站要花费多少?  个人网站制作流程图片大全,个人网站如何注销?  建站之星上传入口如何快速找到?  如何获取上海专业网站定制建站电话?  黑客如何通过漏洞一步步攻陷网站服务器?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  ,如何利用word制作宣传手册?  如何打造高效商业网站?建站目的决定转化率  图册素材网站设计制作软件,图册的导出方式有几种?  已有域名和空间如何快速搭建网站?  建站之星在线客服如何快速接入解答?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  如何在Windows环境下新建FTP站点并设置权限?  广德云建站网站建设方案与建站流程优化指南  制作网站的基本流程,设计网站的软件是什么?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  小程序网站制作需要准备什么资料,如何制作小程序?  如何通过VPS建站无需域名直接访问?  西安大型网站制作公司,西安招聘网站最好的是哪个?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  在线制作视频的网站有哪些,电脑如何制作视频短片?  建站之星安装提示数据库无法连接如何解决?  如何通过WDCP绑定主域名及创建子域名站点?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  网页设计与网站制作内容,怎样注册网站?  名字制作网站免费,所有小说网站的名字?  如何在阿里云ECS服务器部署织梦CMS网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  内部网站制作流程,如何建立公司内部网站?  如何制作网站标识牌,动态网站如何制作(教程)?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  建站之星如何快速解决建站难题?  ,想在网上投简历,哪几个网站比较好?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何在IIS中配置站点IP、端口及主机头?  七夕网站制作视频,七夕大促活动怎么报名?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  大学网站设计制作软件有哪些,如何将网站制作成自己app?  建站之星免费模板:自助建站系统与智能响应式一键生成  如何快速查询网站的真实建站时间?  如何在七牛云存储上搭建网站并设置自定义域名?  php json中文编码为null的解决办法  大型企业网站制作流程,做网站需要注册公司吗?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  表情包在线制作网站免费,表情包怎么弄?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。