单个命令用于打开文件或创建文件以及附加数据

Mat*_*ani 18 fortran fortran90

我想知道在Fortran中是否可以只使用一个命令(带选项/说明符)来执行以下操作:

  1. 打开文件(如果存在)并附加一些数据(这可以通过以下方式完成:open(unit=40,file='data.data',Access = 'append',Status='old')但如果文件不存在则会发出运行时错误)

  2. 如果文件不存在则创建该文件并写入一些数据.

我目前正在使用inquire来检查文件是否存在,但我仍然必须使用该open语句来追加或写入数据.

Bál*_*adi 24

据我所知,唯一安全的解决方案是按照你已经这样做的方式,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
Run Code Online (Sandbox Code Playgroud)

您可能对我的Fortran接口库感兴趣的libc文件系统调用(modFileSys),它至少可以inquire通过直接查询文件状态来节省逻辑变量和语句:

if (file_exists("test.txt")) then
    ...
else
    ...
end if
Run Code Online (Sandbox Code Playgroud)

但是你当然可以自己轻松编写类似的功能,特别是它不会让你从这两个open陈述中解脱出来......


Jon*_*röm 7

open(61,file='data.txt',action='write',position='append')
write(61,*) 'hey'
close(61)
Run Code Online (Sandbox Code Playgroud)

这将追加到现有文件中,否则创建并写入。添加status='unknown'将是等效的。


小智 4

如果将状态从“旧”替换为“未知”,那么如果文件存在或现在,您将不会收到运行时错误。

谢谢

  • “unknown”实际上是“open”的默认状态 (2认同)
  • 另外,正如其他人指出的那样,它需要是 `position='append'` (2认同)