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

时间:2013-03-20 14:21:44

标签: fortran fortran90

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

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

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

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

4 个答案:

答案 0 :(得分:22)

据我所知,唯一的安全解决方案是按照您已经采用的方式进行操作,针对不同情况使用不同的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语句中省去......

答案 1 :(得分:5)

open(61,file='data.txt',action='write',position='append')
write(61,*) 'hey'
close(61)

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

答案 2 :(得分:4)

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

由于

答案 3 :(得分:0)

在open语句中添加属性access,如下所示;

Open(unit=031,file='filename.dat',form='formatted',status='unknown',access='append')

上述语句将在不破坏旧数据的情况下打开文件,而write命令会在文件中追加新行。 fortran 90最简单的解决方案。