Отварање датотеке

Датотекама се приступа коришћењем показивача на структуру FILE која је дефинисана у датотеци stdio.h.

Име показивача може бити произвољно, али ми ћемо најчешће користити име које означава ток података, ulaz, односно izlaz. У загради су дати називи показивача који се врло често могу наћи у стручној литератури – in, односно out.

Пример:

FILE *ulaz (*in), *izlaz (*out);

У случају да учитавамо податке из датотеке у програм, односно ако нам је датотека извор података, писаћемо

FILE *ulaz;

Ако излазне податке из програма уписујемо у датотеку, показивач ћемо декларисати као

FILE *izlaz;

Да би се извршила нека операција са датотеком, датотека мора бити отворена позивањем функције fopen. Њен општи облик је fopen(“fajl koji se otvara“, rezim).

Навели смо раније да можемо користити релативну и апсолутну путању до датотеке. Релативна путања се користи на следећи начин:

  • Ако се датотека и извршни програм налазе у истом директоријуму, “fajl koji se otvara“ садржи име датотеке. Функција у овом случају има облик fopen(“datoteka.txt“, rezim).

  • У случају да је датотека смештена у неком од поддиректоријума у односу на онај где се налази извршни програм, функција би имала облик fopen(“baza\\podaci\\datoteka.txt“, rezim).

У директоријуму где се налази извршни програм, смештен је поддиректоријум baza. У оквиру њега се налази поддиректоријум podaci у коме се налази датотека.

Ако се датотека налази у неком другом директоријуму рачунара, што је ређи случај, наводи се апсолутна путања до ње. Функција за отварање датотеке би могла да има облик fopen(“C:\\Users\\Rаcunar1\\Programiranje\\datoteka.txt“, rezim).

Подсети се зашто се користе две обрнуте косе црте, а не само једна?

Режим означава начин коришћења датотеке.

За упис у датотеку користићемо режим „w” (енгл. write mode), а за читање из датотеке „r”(енгл. read mode). Ако се додаје неки садржај, користи се режим „a” (енгл. append mode).

Да би се ажурирао садржај датотеке (наизменично читање и писање), претходним ознакама се додаје знак +, независно од основног режима рада.

Дакле, да сумирамо!

Текстуалне датотеке могу да се отворе за:

  • r (read), само за читање. Датотека мора постојати;

  • w (write), само за писање. Ако датотека постоји, брише се њен садржај;

  • a (append), додавање на крај датотеке. Ако датотека не постоји, формира се нова;

  • r+, читање и писање у постојећу датотеку. Показивач се поставља на почетак датотеке;

  • w+, читање и писање у датотеку, при чему се стари садржај датотеке брише. Ако датотека не постоји, формира се нова;

  • a+, читање и додавање на крај датотеке. Ако датотека не постоји, формира се нова.

Да наставимо!

Функција fopen враћа показивач на структуру FILE који се додељује променљивој истог типа.

Пример:

ulaz = fopen("naziv_datoteke.txt", "r"); 
izlaz = fopen("naziv_datoteke.txt", "w");

У случају неуспешног отварања fopen враћа вредност NULL.

Из тог разлога неопходно је испитати враћену вредност, односно додати исказ:

if (ulaz == NULL) printf ("Greska pri otvaranju fajla!"), или
if (izlaz == NULL) printf ("Greska pri otvaranju fajla!").