Fortran运行时错误:无法打开文件(没有这样的文件或目录)

时间:2016-07-20 22:34:09

标签: fortran

免责声明:我使用的是用FORTRAN编写的程序,我在使用它时遇到了麻烦。我根本不熟悉FORTRAN。如果这是一个虚假的问题,我会提前道歉。

我收到以下错误:

At line 1494 of file phot_star_fit18.f90 (unit = 45)
    Fortran runtime error: Cannot open file '/Users/.../SSPFITTING/GASFIT/ssp/ssplist.d': No such file or directory

Error termination. Backtrace:
#0  0x10a0a9729
#1  0x10a0aa3f5
#2  0x10a0aab59
#3  0x10a16f70a
#4  0x10a16f950
#5  0x10a09815c
#6  0x10a09ee5e

第1494行是:

open(unit=45,file=splist,status='old',action='read')

/Users/.../SSPFITTING/GASFIT/ssp/目录中,我有以下与ssplist相关的文件。事:

ssplist.dat2
ssplist.dat04
ssplist.dat5
ssplist.dat08

有没有人可以解释为什么这会失败以及为什么代码期望ssplist.d文件?

2 个答案:

答案 0 :(得分:0)

问题中没有足够的数据来确定这是否真的是问题,但我有一个强烈的怀疑:

它尝试打开一个名为/Users/.../SSPFITTING/GASFIT/ssp/ssplist.d的文件,该文件不存在。现在有几个文件ssplist.d开始,但没有一个文件是全名。

如果尝试将字符串分配给固定长度的char变量,则删除最后一个字符:

program string1
    implicit none
    character(len=8) :: h
    h = "Hello World"
    print *, h
end program string1

打印:

Hello Wo

我的建议是搜索你的角色变量splist的声明,我怀疑它看起来像这样:

character(len=xx) :: splist

但也可能更老:

character*xx splist

或类似的内容,其中xx是一个数字。此xx至少需要/Users/.../SSPFITTING/GASFIT/ssp/ssplist.dat08中的字符数(我还怀疑您已用...替换了一长串子目录,因此我无法告诉您如何许多人物都是。)我怀疑这个数字只是一点点的缩短。

答案 1 :(得分:-1)

斜线是否正确倾斜? 你可以询问......

LOGICAL :: Existent = .FALSE.
...
INQUIRE(FILE='somefile', EXIST=Existent)
IF(Existent) THEN
  OPEN(...
  READ(...
  CLOSE(...
ELSE
  WRITE(*,10) SomeFile(1:??)
10 FORMAT(" Cannot find file="',A,'"')
ENDIF

write语句显示的主要内容是无法存在的内容。 如果包含文件名的字符串被限制为80个字符,并且您正在截断' at1'然后那可以给你洞察力。

这是一个冗长的方式来说明chw21说的话。