Отварање датотеке¶
Датотекама се приступа коришћењем показивача на структуру 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!").