Fortran error: "Cannot read from a file opened for WRITE"

Fortran error: "Cannot read from a file opened for WRITE"

我正在编写一个 Fortran 代码,它可以非常简单(我认为)读取和处理数据。相关部分看起来像

module mymod

integer :: funit

contains

subroutine initialize()
character(len=64) :: newline
funit=10
! notice I am specifying a "read" here
open(unit=funit,file='mydata.txt',status='old',action='read')
do i = 1,100
  read(funit,*) newline
! process newline ....
  if ( ... certain conditions ... ) call initialize_subset(i)
enddo
end subroutine


subroutine initialize_subset(n)
character(len=64) :: newline
integer :: n
read(funit,*) newline  ! <--- right here gives an error
! ... process newline
end subroutine

end module

当执行到第二个 read,即子例程 initialize_subset 中的那个时,它失败并显示错误 "Fortran runtime error: Cannot read from file opened for WRITE" 出了什么问题?当然我不需要在第二个例程中再次打开文件?请注意,funit 是一个模块变量,对任何一个子例程都不是本地的,并且文件是用 action "read" 打开的。我正在用 gfortran 编译。

为了尽量避免问题,将 funit 传递给需要读取同一文件的例程。

if ( ... certain conditions ... ) call initialize_subset(i, funit)

但是,问题中发布的代码为我运行。在提供更多信息之前,我无法寻找报告行为的原因(也无法测试上述是否绕过它,即使我相信它应该)。

如果您没有对该文件设置适当的权限,我会遇到此错误。