我想知道在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接口库libc文件系统调用(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'
将是等价的。如果您将状态从“旧”更改为“未知”,则无论文件是否存在,您都不会收到运行时错误。
谢谢
position='append'
。 - zbeekmanaccess
;Open(unit=031,file='filename.dat',form='formatted',status='unknown',access='append')
以上语句将打开文件而不破坏旧数据,写入命令将在文件中添加新行。Fortran 90 的最简单解决方案。
access='append'
。也许你想表达的是Nick在他下面的回答中提到的内容? - Vladimir F Героям слава
access
属性只允许使用“sequential”或“direct”作为取值。我猜你的意思是使用position="append"
代替。 - Bálint Aradi