如何在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
相关产品推荐
相关产品推荐

