fortran读取二进制文件

时间:2013-10-30 16:33:51

标签: file binary fortran

我是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中编译。

1 个答案:

答案 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),则可能会出现问题。