Professional Documents
Culture Documents
( IX )
DATOTEKE
mr Dražen Brđanin
Elektrotehnički fakultet Banja Luka
2007.
9.1. Definicija datoteke
FAJLOVI?
Datoteke (fajlovi)
Datoteka (eng. file) je kolekcija podataka smještena u nekoj sekundardnoj
memoriji (disk, disketa, ...)
Organizacija datoteka s obzirom na način pristupa podacima:
datoteke sa sekvencijalnim pristupom
datoteke sa direktnim pristupom
Prog. jezik C tretira komunikaciju sa perifernim uređajima (tastatura, displej,
disk) kao razmjenu strimova (tekstualni tokovi) – dugački nizovi bajtova
Tekstualne datoteke su nizovi sa maksimalno 255 znakova (red ili linija). Linije ne
završavaju sa \0, nego odgovarajućim EOL (End-Of-Line) terminatorom (CR-LF)
Svaki fajl treba da ima ime (u skladu sa pravilima za dati operativni sistem) –
najčešće niz slova (uključujući cifre) određene dužine (npr. DOS – 8 znakova)
char *f_ime_A = "datoteka.txt";
char *f_ime_B = "C:\temp\datoteka.txt";
2
9.2. Otvaranje i zatvaranje datoteke
OTVARANJE FAJLA?
Otvaranje datoteke
Otvaranje datoteka podrazumijeva:
otvaranje postojećeg fajla za čitanje postojećih i/ili dodavanje novih podataka
kreiranje novog fajla za upisivanje podataka
naziv datoteke
Otvaranje datoteke vrši se funkcijom čiji je prototip
FILE *fopen (char *f_ime, char *mode);
Primjer:
4
9.3. Ulazno/izlazne operacije
PISANJE U FAJL?
5
9.3. Ulazno/izlazne operacije
PISANJE U FAJL?
Primjer:
#include <stdio.h>
main()
{
FILE *fp;
int i;
1
if ( (fp = fopen( "brojevi.dat" , "w" )) != NULL ) 2
{ 3
for (i=1; i<=5; i++) 4
fprintf(fp, "%d\n", i); 5
fclose(fp);
}
else
printf("Greska\n");
}
6
9.3. Ulazno/izlazne operacije
PISANJE U FAJL?
upisivanje stringa
int fputs (char *s, FILE *fp);
7
9.3. Ulazno/izlazne operacije
ČITANJE IZ FAJLA?
8
9.3. Ulazno/izlazne operacije
ČITANJE IZ FAJLA?
Primjer:
9
9.3. Ulazno/izlazne operacije
ČITANJE IZ FAJLA?
čitanje stringa
char *fgets (char *s, int n, FILE *fp);
maksimalan broj
znakova u stringu
koji se učitava
10
9.3. Ulazno/izlazne operacije
ČITANJE IZ FAJLA?
Primjer:
#include <stdio.h>
main() Sadrzaj datoteke:
{ abcdefghijklmnopqrstuvwxy
FILE *fp;
int i;
Primjer:
#include <stdio.h> Sadrzaj datoteke:
main() abcdefghi
{
jklmnopqr
FILE *fp;
stuvwxy
int i; char s[10];
Indikator pozicije
Svaka otvorena datoteka ima indikator trenutne pozicije (izražava se brojem
bajtova u odnosu na početak fajla)
fp = fopen (“datoteka”, “w”);
putc(‘A’, fp);
Indikator = 0
A
Indikator = 7
13
9.4. Sekvencijalni i random pristup
PRISTUP DATOTECI?
Indikator = 7
A s t r i n g
rewind(fp); Indikator = 0
14
9.4. Sekvencijalni i random pristup
PRISTUP DATOTECI?
Prije upisa: 0
Poslije upisa: 6
Prije citanja: 0
Primjer: Sadrzaj: string
#include <stdio.h> Poslije citanja: 6
main() Nakon premotavanja: 0
{
FILE *fp;
15
9.4. Sekvencijalni i random pristup
PRISTUP DATOTECI?
Broj bajtova za
koliko se vrši
repozicioniranje pozicija u odnosu na koju se računa
pomjeraj:
0 – u odnosu na početak datoteke
1 – u odnosu na trenutnu poziciju
2 – u odnosu na kraj datoteke
16
9.4. Sekvencijalni i random pristup
PRISTUP DATOTECI?
Prije citanja: 0
Sadrzaj:
Banja
Primjer: Luka
Poslije citanja: 11
#include <stdio.h> Pocetak: B
main() Kraj: a
{
FILE *fp; char s[10];
fp = fopen( "tekst.txt" , "w" );
fputs("Banja\n", fp);
fputs("Luka", fp);
fclose(fp);
fp = fopen( "tekst.txt" , "r" );
printf("Prije citanja: %d\n", ftell(fp));
printf("Sadrzaj:\n");
while (!feof(fp)) printf("%s", fgets(s,10,fp));
printf("\nPoslije citanja: %d\n", ftell(fp));
fseek(fp,0,0); printf("Pocetak: %c\n", getc(fp));
fseek(fp,-1,2); printf("Kraj: %c\n", getc(fp));
fclose(fp);
}
17