Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Fortran 77中确定文件大小_Fortran - Fatal编程技术网

如何在Fortran 77中确定文件大小

如何在Fortran 77中确定文件大小,fortran,Fortran,我有一个Fortran程序,需要读取ASCII文件,但是文件列表有时包含大小为0的文件。然后程序在试图读取此文件时崩溃。到目前为止,我还没有找到任何方法来标记这样一个文件 我的代码中有以下READ语句 read(10,220,END=320,ERR=195)parm(1:) 虽然我希望代码可以转到语句195或语句320,但不会崩溃,它会崩溃 这就是当文件大小为零时代码崩溃的地方,并显示以下消息 ... fmt: end of file apparent state: unit 10 named

我有一个Fortran程序,需要读取ASCII文件,但是文件列表有时包含大小为0的文件。然后程序在试图读取此文件时崩溃。到目前为止,我还没有找到任何方法来标记这样一个文件

我的代码中有以下READ语句

read(10,220,END=320,ERR=195)parm(1:)
虽然我希望代码可以转到语句195或语句320,但不会崩溃,它会崩溃

这就是当文件大小为零时代码崩溃的地方,并显示以下消息

...
fmt: end of file
apparent state: unit 10 named junko.con
last format: (A)
lately reading sequential formatted external IO
  • 我试着使用INQUIRE语句
    查询(unit=10,SIZE=nsize)
    ,但程序无法编译

  • 打开零大小文件时,OPEN语句没有给出任何错误,
    IOSTAT
    的值是相同的,与文件大小无关


  • 正如Ian所指出的,任何现代Fortran编译器都应该具有
    INQUIRE
    。一个简单的测试

    program foo
      integer sz
      inquire(file='tmp.dat',size=sz)
      print *, sz
    end program foo
    

    如果tmp.dat文件集为空,请创建一个供我们查看的文件集。例如,在这里,我们如何确保程序在您所说的时间点崩溃?它可能在其他地方。打开大小为零的文件时,这不是错误,因此如果您需要以某种方式测试文件的大小,请告诉我们inquire语句是如何编译失败的。请注意inquire(…,size=…)在超过四分之一个世纪的时间里并不是过时的一部分,并且删除了Fortran 77标准。相反,它是Fortran 2003的一部分,这很好,因为这是您应该使用的。对于符合标准的Fortran 77代码(我发现要了解为什么有人仍在使用Fortran 77编译器),您可以用
    inquire(FILE='tmp.dat',RECL=SZ)替换上面的inquire语句
    。如果设备未连接,至少gfortran总是将RECL=设置为0或-1,因此它不会给出文件的大小。正如@janneb所提示的,文件必须在
    查询(…,RECL=)之前连接。
    返回任何可能有用的内容。更糟糕的是,在F77下,必须连接才能直接访问。更糟糕的是,
    inquire(file=filename,recl=rl);打印*,rl
    (转换为F77)在F77下实际上是非法的,除非文件连接正确。