我正在编写一个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一起编译。
答案 0 :(得分:1)
尝试没有问题将funit
传递给需要读取同一文件的例程。
if ( ... certain conditions ... ) call initialize_subset(i, funit)
然而,问题中发布的代码适用于我。在提供更多内容之前,我无法查找报告行为的原因(也不测试上述是否绕过它,即使我认为应该这样做。)
答案 1 :(得分:1)
如果您没有在文件上设置适当的权限,我会遇到此错误。