Deo zbornika Uvod u programiranje kroz C

Otvaranje i zatvaranje fajla u jeziku C

Komunikacija s fajlovima vrši se preko spremnika (buffer), u koji se privremeno pohranjuju informacije koje se šalju u datoteku. Svrha spremnika je smanjiti komunikaciju s vanjskom memorijom (diskom) i tako povećati efikasnost ulazno-izlaznih funkcija.

U datoteci <stdio.h> deklarirana je struktura FILE, koja sadrži sve podatke potrebne za komunikaciju s datotekama (uključujući veličinu i položaj spremnika).

Otvaranje fajla

Program koji želi otvariti datoteku mora prvo deklarirati pokazivač na FILE kao u ovom primjeru:

FILE *ptvar;

Datoteka mora biti otvorena pomoću funkcije fopen, prije prve operacije pisanja ili čitanja. Tipično se fopen koristi na sljedeći način:

ptvar=fopen(ime,tip);
if(ptvar==NULL)
{
    printf("Poruka o gresci"):
    ......
}

gdje je ime ime datoteke koja se otvara, a tip jedan od sljedećih stringova:

tip Značenje
“r” Otvaranje postojeće datoteke samo za čitanje
“w” Kreiranje nove datoteke samo za pisanje.
“a” Otvaranje postojeće datoteke za dodavanje teksta.
“r+” Otvaranje postojeće datoteke za čitanje i pisanje.
“w+” Kreiranje nove datoteke za čitanje i pisanje.
“a+” Otvaranje postojeće datoteke za čitanje i dodavanje teksta.

Pri tome treba znati da:

  • Ako se postojeća datoteka otvori s “w” ili “w+” njen sadržaj će biti izbrisan i pisanje će početi od početka.
  • Ako datoteka koju otvaramo s tipom “a” ili “a+” ne postoji bit će kreirana.
  • Ako se datoteka otvara s tipom “a” ili “a+” novi tekst će biti dodavan na kraju datoteke (“a” dolazi od eng. append).

Pomoću gornjih oznaka tipova, datoteka će biti otvorena u tekstualnom modu. Da bi se otvorila u binarnom modu treba treba svakom tipu dodati b. Time dolazimo do tipova:

  • “rb”, “wb”, “ab” = binarno čitanje, pisanje, dodavanje;
  • “rb+” ili “r+b” = binarno čitanje/pisanje (otvaranje);
  • “wb+” ili “w+b” = binarno čitanje/pisanje (kreiranje);
  • “ab+” ili “a+b” = binarno dodavanje.

Funkcija fopen vraća pokazivač na strukturu FILE povezanu s datotekom ili NULL ako datoteka nije mogla biti otvorena.

Zatvaranje fajla

Na kraju programa datoteka treba biti zatvorena funkcijom fclose koja uzima kao argument pokazivač na spremnik:

fclose(ptvar);

Na primjer, otvaranje i zatvaranje datoteke primjer.dat izgledalo bi ovako:

#include <stdio.h>
.......
FILE *fpt;
if((fpt=fopen("primjer.dat","w")) == NULL)
    printf("\nGRESKA: Nije moguce otvoriti datoteku.\n");
.....
fclose(fpt);

Funkcija fclose vraća nulu ako je datoteka uspješno zatvorena, te EOF u slučaju greške.

Izvor: M. Jurak, Programski jezik C, predavanja 2003/04.