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)
但是,问题中发布的代码为我运行。在提供更多信息之前,我无法寻找报告行为的原因(也无法测试上述是否绕过它,即使我相信它应该)。
如果您没有对该文件设置适当的权限,我会遇到此错误。
我正在编写一个 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)
但是,问题中发布的代码为我运行。在提供更多信息之前,我无法寻找报告行为的原因(也无法测试上述是否绕过它,即使我相信它应该)。
如果您没有对该文件设置适当的权限,我会遇到此错误。