我想知道在 Fortran 中是否可以只使用一个命令(带有选项/说明符)来执行以下操作:
如果文件存在,则打开文件并附加一些数据(这可以通过以下方式完成:
open(unit=40,file='data.data',Access = 'append',Status='old')
但如果文件不存在,则会发出运行时错误)如果文件不存在,则创建文件并写入一些数据。
我目前正在使用inquire
检查文件是否存在,但我仍然必须使用该open
语句来追加或写入数据。
据我所知,唯一安全的解决方案是按照您已经在做的方式,open
针对不同的情况使用不同的语句:
program proba
implicit none
logical :: exist
inquire(file="test.txt", exist=exist)
if (exist) then
open(12, file="test.txt", status="old", position="append", action="write")
else
open(12, file="test.txt", status="new", action="write")
end if
write(12, *) "SOME TEXT"
close(12)
end program proba
您可能对我的Fortran interface library to libc file system calls (modFileSys) 感兴趣,它至少可以inquire
通过直接查询文件状态为您节省逻辑变量和语句:
if (file_exists("test.txt")) then
...
else
...
end if
但当然你可以自己轻松地编写一个类似的函数,特别是它不会把你从这两个open
语句中拯救出来......
open(61,file='data.txt',action='write',position='append')
write(61,*) 'hey'
close(61)
这将附加到现有文件,否则创建和写入。添加status='unknown'
将是等效的。
如果您将状态从“旧”替换为“未知”,那么如果文件存在或现在,您将不会收到运行时错误。
谢谢
access
在 open 语句中添加如下属性;
Open(unit=031,file='filename.dat',form='formatted',status='unknown',access='append')
上述语句将打开文件而不破坏旧数据,写入命令将在文件中追加新行。fortran 90 最简单的解决方案。