Delo z datotekami

Povratek na kazalo Nazaj Naprej 

Odpiranje datoteke

Primer:

Odprimo za branje datoteko z imenom datoteka. Najprej smo morali definirati kazalec fd, ki ga bomo kasneje uporabljali pri vseh operacijah z odprto datoteko. Temu kazalcu pravimo "opisnik datoteke" (file descriptor).

Drugi parameter v klicu funkcije fopen je v danem primeru "r", zato bo datoteka odprta za branje.

Seznam vseh možnosti

"r"  Odpri datoteko za branje 
"w"  Odpri datoteko za pisanje. Če je še ni, jo tvori, če je že, jo povozi 
"a"  Odpri datoteko za pisanje. Če je se ni, jo tvori, sicer dodajaj na konec. 
"r+"  Datoteka bo odprta za branje in pisanje 
"w+"  Datoteka bo odprta za branje in pisanje” 
"a+"  Datoteka bo odprta za branje in pisanje 

Zapiranje datoteke

fclose(fd);

Branje iz datoteke... Zapis v datoteko

Pri navedbi možnih funkcij predpostavimo, da smo deklarirali dva kazalca na datoteki (fp1 in fp2), en niz (s) in eno spremenljivko tipa char:
FILE  *fp1, *fp2;   /* kazalca na datoteki */
char *s                /* kazalec na niz */
int c;
int size, n;

Seznam funkcij za branje in zapis v datoteko:

c = getc (fp1);  /* To je makro */ 
c = fgetc(fp1);  /* To je funkcija */ 
Branje znaka iz datoteke (podobno getchar()) 
ungetc(c,fp1)  Vrne znak na standardni vhod 
fgets (s,n,fp1);  Branje (največ n) znakov iz datoteke v niz s 
fscanf (fp1, format, &arg1, &arg2,..);  Formatirano branje, podobno kot scanf() 
fread (s, size, n, fp1);  Neformatirano (binarno) branje n elementov,velikosti size, pomnjenih v polju s. 
Funkcija vrne število prebranih elementov. 
putc (ch, fp2)  Zapis znaka v datoteko 
fputs (s,fp2);  zapis niza v datoteko 
fprintf (fp2,format, arg1, arg2,..);  Formatiran zapis v datoteko 
fwrite ( s, size, n, fp2);  Neformatirani (binarni) zapis n elementov velikosti “size”. s kaže na polje elementov. 
Funkcija vrne število zapisanih elementov. 

Primer 1:

Kopiranje ene datoteke, znak po znak, v drugo:
     #include < stdio.h >
     /* Kopiranje datoteke */
     main() {
         FILE *fp1,  *fp2;
         int ch;

         if ((fp1= fopen("inpFile", "r")) ==NULL) {
             fprintf(stderr,"Datoteke ne morem odpreti");
             exit (1);
         }
         fp2 = fopen ("outFile", "w");
         while ( (ch = getc(fp1)) != EOF) putc(ch, fp2);
         fclose( fp1); fclose (fp2);
         exit (0);
     }

Naključno branje in pisanje v datoteko

Pri naslednjih funkcijah uporabljamo spremenljivko tipa "long integer", ki predstavlja odmik (in torej položaj v datoteki), merjen v bytih
     FILE *fp;
     long odmik;      /* v datoteki */
     int odkod ;        /* od kod se steje odmik  */

Možne funkcije

rewind (fp);  Postavi odmik na začetek datoteke 
fseek (fp, odmik, odkod);  Drugi parameter -odmik -pove, od kod dalje bo sledili branje ali zapis v datoteko. 

Tretji parameter ima lahko eno od vrednosti: 

  • SEEK_SET .... Začetek datoteke 
  • SEEK_CUR.....Trenutni položaj v datoteki 
  • SEEK_END......Konec datoteke 
  • odmik = ftell (fp);  Dobimo trenutni položaj (odmik) v datoteki 
      Klasični (ne ANSI) C je za tretji parameter uporabljal vrednosti 0, 1 in 2.


    Preostale funkcije za delo z datotekami

    ferror (fp)  Vrne TRUE , če je indikator napake za dani (datotečni) tok (stream) setiran (zaradi neuspele predhodne vh/izh operacije) 
    feof (fp)  Vrne TRUE, če želimo brati po koncu datoteke 
    clearerr (fp)  Resetira indikatorja vh/izh napake in konca datoteke 
    fflush (fp)  Sistem zapisuje podatke v datoteko preko medpomnilnika. Ta funkcija forsira prepis podatkov iz medpomnilnika v datoteko. 
    char buffer [BUFSIZ]
    setbuf (fp, bufer)
    Sami zagotovimo polje za medpomnilnik.BUFSIZ je definiran v stdio.h . Če namesto naslova polja buffer navedemo (char *) NULL, bo do operacije brez medpomnilnika (unbuffered) 

    Povratek na kazalo Nazaj Naprej