Single command to open a file or create it and the append data

Matteo Parsani picture Matteo Parsani · Mar 20, 2013 · Viewed 50k times · Source

I would like to know if in Fortran it is possible to use just a single command (with options/specifiers) to do the following:

  1. open a file if it exists and append some data (this can be done with: open(unit=40,file='data.data',Access = 'append',Status='old') but if the file does not exist a runtime error is issued)

  2. create the file if it does not exist and write some data.

I am currently using inquire to check whether the file exist or not but then I still have to use the open statement to append or write data.

Answer

Bálint Aradi picture Bálint Aradi · Mar 20, 2013

As far as I am aware of, the only safe solution is to do the way you're already doing it, using different open statements for the different cases:

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

You may be interested in my Fortran interface library to libc file system calls (modFileSys), which could at least spare you the logical variable and the inquire statement by querying the file status directly:

if (file_exists("test.txt")) then
    ...
else
    ...
end if

but of course you can program a similar function easily yourself, and especially it won't save you from the two open statements...