You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Fortran中覆盖二进制文件部分内容(更新输出文件头部)

解决方法

要在处理完所有数据帧后更新输出文件的头部,核心思路是将输出文件的指针移回开头,重新写入修改后的头部数据——由于你的头部是固定大小的块,重写操作不会破坏后续的帧数据。具体有两种实现方式:

方法一:不关闭文件,直接回写头部

写完所有帧后,不要立即关闭输出文件,先修改header数组的目标值,再将文件指针重置到开头,重新写入头部:

将代码中PLACEHOLDER部分替换为:

! 示例:更新头部的第2个元素(帧数)为计算后的新值
header(2) = updated_nb_frames  ! 替换成你实际得到的新值

! 将输出文件的指针移到开头
rewind(unit=2)

! 写入更新后的头部
write(2) header

这种方式无需重新打开文件,效率更高,适合大多数场景。

方法二:重新打开文件回写头部

如果已经关闭了输出文件,也可以重新打开并定位到开头,写入修改后的头部:

将代码中PLACEHOLDER部分替换为:

! 示例:更新头部的指定字段
header(1) = updated_frame_size  ! 替换成实际需要更新的帧大小
header(2) = updated_nb_frames   ! 替换成实际需要更新的帧数

! 重新打开输出文件,定位到文件开头
open(unit=2, file='fort.2', access='stream', status='old', position='rewind')
write(2) header
close(unit=2)

关键说明

  • 因为你使用了access='stream'(流访问模式),rewind或position='rewind'可以准确将文件指针重置到文件起始位置。
  • 头部是固定大小的256个int32类型数据,重写这段数据只会覆盖原来的头部,不会影响后续写入的帧数据(帧数据紧跟在头部之后,存储位置不会改变)。

内容的提问来源于stack exchange,提问作者Fravadona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:52:49