2

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

4

1 回答 1

3

像这样打开一个可写的流访问文件:

      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 上阅读它,您应该不会有任何问题。但是,如果您在具有不同字节顺序的不同平台上读/写(例如 POWER5 与 x64),您可能会遇到问题。

于 2016-10-06T04:38:37.697 回答