Fortran错误:“无法从为WRITE打开的文件中读取”

时间:2016-03-25 21:56:31

标签: file io fortran fortran90 gfortran

我正在编写一个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运行时错误:无法读取为WRITE打开的文件”出了什么问题?当然我不需要在第二个例程中再次打开文件?请注意,funit是一个模块变量,并不是任何子例程的本地变量,并且该文件是使用action“read”打开的。我正在和gfortran一起编译。

2 个答案:

答案 0 :(得分:1)

尝试没有问题将funit传递给需要读取同一文件的例程。

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

然而,问题中发布的代码适用于我。在提供更多内容之前,我无法查找报告行为的原因(也不测试上述是否绕过它,即使我认为应该这样做。)

答案 1 :(得分:1)

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