Informacje wejściowe/wyjściowe pliku#

W Fortranie plikami można zarządzać przed identyfikatory jednostek. Interakcje z systemem plików wykonywane są głównie przez wbudowane procedury open oraz inquire. Zazwyczaj przepływ pracy polega na otwarciu pliku dzięki identyfikatorowi jednostki, odczytaniu lub/i zapisaniu go, a następnie jego ponownym zamknięciu.

integer :: io
open(newunit=io, file="log.txt")
! ...
close(io)

Domyślnie, plik zostanie utworzony jeśli jeszcze nie istnieje, a następnie otworzony do odczytu oraz zmodyfikowania. Pisanie w istniejącym pliku rozpocznie się w pierwszym rejestrze (wersie), a więc plik domyślnie zostanie nadpisany.

Aby plik mógł zostać otwarty tylko do odczytu pola status oraz action muszą zostać określone

integer :: io
open(newunit=io, file="log.txt", status="old", action="read")
read(io, *) a, b
close(io)

W przypadku kiedy plik nie istnieje pojawi się błąd czasu wykonania. Aby sprawdzić czy dany plik istnieje przed otwarciem go funkcja inquire może zostać użyta

logical :: exists
inquire(file="log.txt", exist=exists)
if (exists) then
  ! ...
end if

Ewentualnie, procedura open może opcjonalnie zwrócić iostat i iomsg:

integer :: io, stat
character(len=512) :: msg
open(newunit=io, file="log.txt", status="old", action="read", &
  iostat=stat, iomsg=msg)
if (stat /= 0) then
  print *, trim(msg)
end if

Należy pamiętać, że iomsg wymaga zmiennej o stałej długości i wystarczającej pojemności do przechowywaniu komunikatu błędu.

Podobnie, pisanie w pliku dzieje się poprzez użycie słów kluczowych status oraz action. Aby stworzyć nowy plik użyj

integer :: io
open(newunit=io, file="log.txt", status="new", action="write")
write(io, *) a, b
close(io)

Ewentualnie, status="replace" może zostać użyty do nadpisania istniejącego pliku. Zaleca się jednak najpierw sprawdzić czy dany plik istnieje przed zdecydowaniem się na użycie status. Aby dołączyć do pliku wyjściowego, słowo kluczowe position może zostać określone jawnie za pomocą

integer :: io
open(newunit=io, file="log.txt", position="append", &
  & status="old", action="write")
write(io, *) size(v)
write(io, *) v(:)
close(io)

Do zresetowania pozycji w pliku mogą zostać użyte wbudowane procedury rewind oraz backspace. rewind zresetuje pierwszy rejestr (wers), natomiast backspace powróci do poprzedniego rejestru (wersu).

Na koniec, aby usunąć plik najpierw musi zostać otwarty i może zostać usunięty po jego zamknięciu przy pomocy

logical :: exists
integer :: io, stat
inquire(file="log.txt", exist=exists)
if (exists) then
  open(file="log.txt", newunit=io, iostat=stat)
  if (stat == 0) close(io, status="delete", iostat=stat)
end if

Przydatną funkcji IO są pliki robocze, które mogą być otwarte dzięki status="scratch". Są one automatycznie usuwane po zamknięciu identyfikatora jednostki.