我是fortran的新手。
我使用Microsoft Developer Studio 4.0创建了一个程序来创建二进制文件。 我按如下方式打开它:
OPEN(2,FILE='output_bin.bin',FORM='UNFORMATTED')
我在其中写了一个数组INTEGER*2 IHIST(30)
,现在填充了0到29之间的数字。写作完成时:
DO 351 J=0,29
WRITE(2) IHIST(J)
351 CONTINUE
在Windows中我可以读取生成的二进制文件。我可以恢复阵列。
然后我想在Ubuntu中阅读它。在这里,我遇到了问题:
当我执行以下操作时,我得到Fortran runtime error: End of file
:
INTEGER*2 RBIN(30)
WRITE(*,*)'Extracting data from binary file ', filename
OPEN(3,FILE=filename,FORM='UNFORMATTED',ACTION='READ'
+ ,STATUS='OLD')
DO 17 I=0,29
READ(3) RBIN(I)
17 CONTINUE
有人可以向我解释如何读取连续的,未格式化的二进制文件。我究竟做错了什么?我认为下一次阅读的起始位置将是后期的结束。
我使用GNU Fortran(Ubuntu / Linaro 4.7.2-2ubuntu1)4.7.2在Ubuntu 12.04中编译。
答案 0 :(得分:2)
打开一个可写的流访问文件,如下所示:
OPEN(2,FILE=filename,FORM='UNFORMATTED',
+ ACCESS='STREAM',STATUS='REPLACE')
然后这样读:
OPEN(3,FILE=filename,FORM='UNFORMATTED',
+ ACCESS='STREAM',STATUS='OLD')
如果您(例如)在gfortran编译的x64 Linux平台上编写它,并在使用Intel Fortran编译的Windows PC上读取它,则不应该有任何问题。但是,如果您在具有不同endiannesses的不同平台上进行读/写操作(例如POWER5与x64),则可能会出现问题。