Опишува како програмерот C создава, отвора и затвора текстуална датотека или бинарна датотека.
Датотека, значи серија од бајти, без разлика дали е текстуална датотека или бинарна датотека, C Language, не само што обезбедува пристап до функциите на највисоко ниво, туку го обезбедува и основниот (OS) повик за обработка на датотеки на уредот за складирање . Ова поглавје ќе ги објасни важните повици во управувањето со документи.
отворена датотека
Обично користејќи ја функцијата fopen () за креирање нова датотека или отворање постоечка датотека, овој повик иницијализира објект од типот FILE кој ги содржи сите потребни информации за контрола на протокот. Еве го прототипот на овој функциски повик:
ДАТОТЕКА *fopen ( const char * име на датотека , const char * режим );
Овде името на датотеката е низа за именување на датотека, вредноста на режимот за пристап може да биде една од следниве вредности:
шема | опис |
r | Отворете постоечка текстуална датотека што овозможува нејзино читање. |
w | Отворете текстуална датотека што овозможува запишување во датотеката. Ако датотеката не постои, се креира нова датотека. Овде, вашата програма ја запишува содржината од почетокот на датотеката. Ако датотеката постои, таа ќе биде скратена на нула должина и повторно ќе се запише. |
a | Отворете текстуална датотека и запишете во датотеката во режим на додаток. Ако датотеката не постои, се креира нова датотека. Овде, вашата програма додава содржина на датотеките што веќе ги имате. |
r+ | Отворете текстуална датотека што ви овозможува да ја читате и пишувате датотеката. |
w+ | Отворете текстуална датотека што ви овозможува да ја читате и пишувате датотеката. Ако датотеката веќе постои, датотеката е скратена на нула должина, а ако датотеката не постои, се креира нова датотека. |
a+ | Отворете текстуална датотека што ви овозможува да ја читате и пишувате датотеката. Ако датотеката не постои, се креира нова датотека. Читањето започнува на почетокот на датотеката, а запишувањето е само во режим на додавање. |
Ако е обработена бинарна датотека, користете го следниов режим на пристап за да го замените горенаведеното:
„rb“, „wb“, „ab“, „rb+“, „r+b“, „wb+“, „w+b“, „ab+“, „a+b“
затворена датотека
За да ја затворите датотеката, користете ја функцијата fclose(). Прототипот на функцијата е како што следува:
int fclose (FILE *fp);
- Ако датотеката е успешно затворена, функцијата fclose() враќа нула, а ако грешката враќа EOF. Оваа функција, всушност, ги отстранува податоците од баферот, ја затвора датотеката и ја ослободува целата меморија што се користи за таа датотека. EOF е константа дефинирана во датотеката за заглавие stdio.h
Стандардната библиотека C обезбедува различни функции за читање и пишување датотеки по знаци или како низа со фиксна должина.
Напиши во датотеката
Еве ги наједноставните функции за пишување знаци во потокот:
int fputc (int c, FILE *fp);
Функцијата fputc () ја запишува вредноста на знакот на параметарот c во излезниот тек на кој покажува fp. Ако запишувањата се успешни, го враќа напишаниот знак и EOF ако се појави грешка. Можете да ја користите следнава функција за да напишете низа што завршува со нула на потокот:
int fputs (const char *s, FILE *fp);
Функцијата fputs () ја запишува низата s во излезниот поток каде што покажува fp. Ако запишувањето успее, враќа ненегативна вредност и EOF ако се појави грешка. Може да ја користите и функцијата int fprintf (FILE * fp, const char * формат,...) запишува стринг во датотеката. Обидете се со следниот пример:
Забелешка: Проверете дали имате достапен директориум tmp, а ако не постои, прво треба да го креирате на вашиот компјутер.
/ tmp е обично привремен директориум на системот Линукс. Ако работите на системот Windows, треба да го измените во постоечки директориум во локалната средина, како што се: C: \ tmp, D: \ tmp, итн.
жив пример
#вклучи
Кога горенаведениот код е компајлиран и извршен, тој создава нова датотека test.txt во директориумот / tmp. И пишува на два реда користејќи две различни функции. Ајде да ја прочитаме оваа датотека следно.
Прочитајте ја датотеката
Следната е наједноставната функција за читање еден знак од датотека:
int fgetc (FILE * fp);
Функцијата fgetc () чита знак од влезната датотека на која покажува fp. Повратната вредност е прочитаниот знак и EOF ако се појави грешка. Следната функција ви овозможува да читате низа од поток:
char *fgets (char *buf, int n, FILE *fp);
Функцијата fgets () чита n-1 знаци од влезниот поток насочен од fp. Ја копира низата за читање во баферот и додава нула знак на крајот за да ја прекине низата.
Ако оваа функција наиде на знак на скршена линија '\ n' или EOF на крајот на датотеката пред да го прочита последниот знак, тогаш се враќа само на прочитаните знаци, вклучувајќи ги и прекините на линиите. Можете исто така да ја користите функцијата int fscanf (FILE * fp, const char * формат,...) за да ја прочитате низата од датотеката, но таа престанува да чита кога ќе се сретне со првото празно место и прекин на линијата.
жив пример
#вклучи
Кога горенаведениот код е компајлиран и извршен, тој ги чита датотеките создадени во претходниот дел, давајќи ги следните резултати:
1: Ова 2: е тестирање за fprintf...
3: Ова е тестирање за fputs...
Прво, методот на fscanf() го чита само This .бидејќи наидува на празно место во задниот дел. Второ, повикајте го функтонот fgets () за да го прочитате преостанатиот дел до крајот на линијата. Конечно, повикајте го fgets () за целосно да го прочитате вториот ред.
Бинарна I/O функција
Следниве две функции се користат за бинарниот влез и излез:
size_t fread (void *ptr , size_t size_of_elements , size_t број_на_елементи , FILE *a_file ); size_t fwrite (const void *ptr , size_t size_of_elements , size_t број_на_елементи , FILE *a_file );
Двете функции се читаат и пишуваат за блокови за складирање - обично низи или структури.
Погоре за читањето и пишувањето на датотеки C припаѓа на HDV Phoelectron Technology Ltd., софтверска техничка операција. И компанијата за мрежна опрема (како што се: ACONU/ комуникацијаONU/ интелигентенONU/ влакнаONU, итн.) собра моќен софтверски тим, за секој клиент да ги приспособи ексклузивните барања на кои им е потребно, а исто така да ги оставиме нашите производи поинтелигентни и понапредни.