Fortran Coder

查看: 103|回复: 4

[文件读写] 二进制文件读取

[复制链接]

27

帖子

8

主题

0

精华

熟手

F 币
162 元
贡献
97 点
发表于 2021-11-17 10:35:46 | 显示全部楼层 |阅读模式
大家好,我正在写一个读取二进制文件的程序(也十分感谢论坛对二进制文件的科普文章),在读取过程中,对文件某一段试了两种方法进行读取,发现方法A可行,而方法B运行报错。想请教一下各位大佬问题出在哪。

方法A:
[Fortran] 纯文本查看 复制代码
do j=1, n
    irec=irec+1
    read(13, rec=irec) array(j)     
enddo


方法B:
[Fortran] 纯文本查看 复制代码
read(13) ( array(j), j=1, n )


13 是文件的unit,方法B运行报的错是: forrtl: severe (259): sequential-access I/O to unit open for direct access, unit 13, file D:......
在文件的开头,是这样打开的文件: open( 13, file='...', access='Direct', form='Unformatted', recl=1 )

或者,对于这样的二进制文件读取,有更快的方式吗?
感谢讨论与指正!
回复

使用道具 举报

154

帖子

2

主题

0

精华

宗师

F 币
1421 元
贡献
730 点

规矩勋章

发表于 2021-11-17 21:01:34 | 显示全部楼层
方法B没有提供rec=选项,则作为顺序文件读取。

1669

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
2192 元
贡献
1376 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2021-11-17 21:49:18 | 显示全部楼层
http://binary.w.fcode.cn/
此处了解 Fortran 经典的二进制文件读写方法。

http://stream.w.fcode.cn/
现代  Fortran 建议用上面的 stream 方法。

27

帖子

8

主题

0

精华

熟手

F 币
162 元
贡献
97 点
 楼主| 发表于 2021-11-18 18:15:09 | 显示全部楼层
fcode 发表于 2021-11-17 21:49
http://binary.w.fcode.cn/
此处了解 Fortran 经典的二进制文件读写方法。

感谢感谢,就是看的第一个链接的文章才写出程序的。刚看了第二个链接想请教一下您,用‘流文件’的方式读取文件在速度上,(比如,同样将文件中的一段读入到一个数组),是否比‘直接读取‘的方式要快呢?我看描述里有“它并不把二进制文件视为一个一个的“记录”,而是视为一个整体”。

1669

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
2192 元
贡献
1376 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2021-11-19 10:16:15 | 显示全部楼层
stream方式读取效率没有其他两种方式高,但是差别并不大。
相比于 stream 方式操作上的灵活优势,我觉得是完全值得的。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2021-12-3 01:59

Powered by Tencent X3.4

© 2013-2021 Tencent

快速回复 返回顶部 返回列表