我正在使用旧的Fortran代码,并且我在旧操作系统中使用g77-3.3运行它。由于这个版本的编译器不再附带我尝试使用gfortran(4.9.2)的大多数Linux发行版,我正面临这个小问题。
此代码使用临时文件。它写入此文件,然后在某个时刻将文件的状态更改为临时,如下例所示:
PROGRAM testopenfile
IMPLICIT NONE
WRITE(8,*)'fdsasfd'
OPEN(8,STATUS='SCRATCH')
CLOSE(8)
END PROGRAM
这段代码适用于g77编译器,但是当我用gfortran运行它时,我收到了消息:
At line 4 of file testopenfile.f (unit = 8, file = 'fort.8')
Fortran runtime error: Cannot change STATUS paramter in OPEN statement.
在gfortran中这种设置临时文件的方式有变化吗?难道我做错了什么?这可能是这个版本的gfortran中的错误吗?
答案 0 :(得分:3)
如果您在打开文件之前写信到单位8
,您实际上是在写一个名为fort.8
的文件,请参阅here。显然,当您尝试将临时文件附加到该文件时,此文件仍在单元8
处打开。
您可以在写入本机前打开暂存文件来解决此问题:
PROGRAM testopenfile
IMPLICIT NONE
OPEN(8,STATUS='SCRATCH')
WRITE(8,*)'fdsasfd'
CLOSE(8)
END PROGRAM
或使用不同的单位。
。Fortran 2008 Standard中的第C.6.3节(“OPEN语句(9.5.6)”)处理了这种情况,并且有一个看起来就像你的代码的例子。它声明此“示例无效,因为它尝试更改STATUS=
说明符的值。”
答案 1 :(得分:1)
如果要在结束时删除文件,也可以
PROGRAM testopenfile
IMPLICIT NONE
WRITE(8,*)'fdsasfd'
CLOSE(8,status='DELETE')
END PROGRAM