You are on page 1of 4

1. Što je to datotečni objekt?

Za svaku fizičku datoteku na disku definira se odgovarajući objekt, tzv. datotečni objekt, koji
sadrži sve potrebne podatke (atribute) i postupke (metode) za rad s fizičkom datotekom.
Datotečni objekti deklarirani su unutar klase fstream, kao osnovne klase za rad s datotekama,
odnosno klasa ofstream (za izlazne datoteke) ili ifstream (za ulazne datoteke).
Primjer: fstream dat;
 dat je datotečni objekt iz klase fstream
– nije mu još pridružena fizička datoteka!

2. Objasnite razliku između fizičkog i logičkog imena datoteke.


Fizičko ime datoteke je ono ime pod kojim je datoteka vidljiva na disku preko operacijskog
sustava računala.
 fizička datoteka pridružuje se datotečnom objektu kod otvaranja datoteke
 za otvaranje datoteke koristi se metoda open:
<datotečni objekt>.open (<fizičko ime datoteke>,<mod otvaranja>)
 mod otvaranja datoteke definira dozvoljene operacije nad datotekom.
Primjer:
dat.open (“podaci.dat”,ios::in | ios::binary);
 datotečnom objektu dat pridružuje se fizička datoteka podaci.dat
 datoteka se otvara za čitanje u binarnom načinu (sadržaji se učitavaju iz datoteke u
nepromijenjenom bitovnom sadržaju; bez konverzija)

3. Što je to mod otvaranja datoteke i što definira? Koji modovi postoje?


Mod otvaranja datoteke definira
– dozvoljeni način rada s datotekom (za čitanje ili upis podataka),
– početnu poziciju datotečnih pokazivača za čitanje i upis,
– hoće li se koristiti postojeća datoteka ili otvoriti nova.
Mod otvaranja zadaje se kao drugi argument metode open za otvaranje datoteke i to kao
bitovna maska:
– svaki od 8 bitova predstavlja po jedan mod otvaranja datoteke
 Uključenje više modova otvaranja datoteke postiže se korištenjem bitovnog ili
operatora "|", čime se više bitova u bitovnoj maski postavlja na vrijednost 1:
ios::in | ios::out | ios::binary - uključuje modove in, out i binary

Modovi su: in, out, out+nocreate, out+noreplace, trunc, app(append), ate(at end), binary,.

4. Što je to datotečni pokazivač i koje su operacije moguće s dat.


pokazivačem?
Datotečni pokazivač sadrži poziciju unutar datoteke gdje se može obaviti operacija čitanja ili
upisa u datoteku. Pozicija je izražena u cijelom broju bajtova od početka datoteke do mjesta
upisa/čitanja. C++ razlikuje datotečni pokazivač za čitanje datoteke od datotečnog pokazivača
za upis u datoteku.
Metode za očitavanje vrijednosti datotečnog pokazivača (tipa tell):
tellg() - vrijednost pokazivača za čitanje datoteke
tellp() - vrijednost pokazivača za upis u datoteku
Metode za zadavanje vrijednosti datotečnog pokazivača (tipa seek):
seekg() - postavlja vrijednost pokazivača za čitanje datoteke
seekp() - postavlja vrijednost pokazivača za upis u datoteku

5. Upišite na poziciju 7. zapisa podatak tpa int.


dat.open ("d.dat", ios::out); //otvaranje dat. za upis podataka
dat.seekp (7 * sizeof(slog)); // postavlja datotečni pokazivač za upis
// na slog s rednim brojem 7
dat.write ((int*)&slog,sizeof(slog));// upis u datoteku

6. Pročitajte s pozicije 3. zapisa podatak tipa float.


dat.open ("d.dat", ios::in); //otvaranje datoteke za čitanje
dat.seekg(3 * sizeof(slog)); //postavlja datotečni pokazivač za čitanje
//na slog s rednim brojem 3
dat.read ( (float*) &slog, sizeof (slog) ); // čitanje iz datoteke

7. Zbrojite vrijednosti zapisa tipa int s pozicija 6. i 7. zapisa u datoteci.


dat.open ("d.dat", ios::in); //otvaranje datoteke za čitanje
dat.seekg(6 * sizeof(slog)); //postavlja datotečni pokazivač za čitanje
//na slog s rednim brojem 6
dat.read ( (int*) &slog, sizeof (slog) ); // čitanje iz datoteke
int a=slog;
dat.seekg(7 * sizeof(slog)); //postavlja datotečni pokazivač za čitanje
//na slog s rednim brojem 7
dat.read ( (int*) &slog, sizeof (slog) ); // čitanje iz datoteke
int b=slog;
int c=a+b;

8. Iskopirajte zapis tipa float s pozicije 4. zapisa na poziciju 10. zapisa.


dat.open ("d.dat", ios::in); //otvaranje datoteke za čitanje
dat.seekg(4 * sizeof(slog)); //postavlja datotečni pokazivač za čitanje
//na slog s rednim brojem 4
dat.read ( (float*) &slog, sizeof (slog) ); // čitanje iz datoteke
dat.seekp (10 * sizeof(slog)); // postavlja datotečni pokazivač za upis
// na slog s rednim brojem 10
dat.write ((float*)&slog,sizeof(slog));// upis u datoteku

9. Unesite u tekstualnu datoteku dva pribrojnika tipa int i njihov zbroj.


fstream dat;
dat.open("tekst.txt",ios::out);
dat << int a << endl;
dat << int b << endl;
int c=a+b;
dat << c << endl;
dat.close();

10. U datoteci je niz cijelih brojeva, odijeljeni znakom <EOLN>. Zbrojite.

11. Definirajte zapis datoteke prijava ispita. Zapišite jedan takav zapis u
datoteku.
struct tprijava{
int mat_br;
char prez_ime[35];
int sifra_ispita;
}
tprijava prijava;
fstream dat;

dat.open („prijave.dat“,ios::out | ios::ate | ios::in| ios::binary);


cin>>prijava.mat_br;
cin>>prijava.prez_ime;
cin>>prijava.sifra_ispita;
dat.write((char*)&prijava, sizeof(prijava));
dat.close();

12. Definirajte zapis datoteke robe. Pročitajte jedan zapis iz datoteke.


struct troba{
int sifra;
char naziv[40];
}
troba roba;
fstream dat;

dat.open („roba.dat“,ios::in | ios::binary);


dat.read((char*)&roba, sizeof(roba));
cout << roba.sifra;
cout << roba.naziv;
dat.close();

13. Dodajte u datoteku „podaci.dat“ još jedan zapis tipa int.


dat.open(„podaci.dat“, ios::out | ios::binary);
dat.write((int*)&zapis, sizeof(zapis));
dat.close();
14. Izbrišite s diska datoteku „podaci.dat“.

15. Prebrojite pojavu broja 10 u datoteci cijelih brojeva „podaci.dat“.

16. Prebrojite pojavu velikog slova „A“ u datoteci znakova „znakovi.dat“.

You might also like