152
Текстік режимде ашу үшін режимді көрсеткенде қасына «t» символын тіркеу
арқылы жүзеге асады;
Режимдер кестесі:
Режим
Сипаты
а
а+
r
r+
w
w+
Файл мәндерімен толықтырылуы үшін ашылады. Егер файл
жоқ болса, ол құрылады. Жаңа мән соңына тіркеледі;
Жоғарыдағы секілді, тек оқұға да болады;
Файлды тек оқу үшін ашады, файл жоқ болса, ашылмайды;
Файлды оқуға да, жазуға да болады;
Жаңа файл ашады, бұрын бар болса, мәнін өшіреді.
Жаңа файлды мән жазуға да, одан оқуға да мүмкіндік
береді. Файл болса, мәні тазартылады.
R+,w+,a+ режимдерін қолдануда, яғни оған оқуды және жазуды бір уақытта
орындалу барысында файл көрсеткішінің Fsetpos(), fseek(), немесе rewind()
файлдары көмегімен ағымды позицияларын модификациялау керек.
Порграмма жұмысы аяқталғанда Си-де автоматты түрде барлық ашық
файлдар жабылады, ал файлды жабу үшін fclose(fin) қолданылады.
С++ тілінде:
Файлмен мәлімет алмасу мақсатында ifstream және ofstream кластарын
қолданған тиімді. Ол үшін < fstream. h > тақырыптық файлы ашылуы тиіс.
Мұнда, сәйкесінше, ifstream класының объектісі myof және ostream
класының mygf лектері құрылып көрсетілген файлмен байланысады.
Мысалы, Ifstream myof(“prim.in”,ios::in);
Ofstream mygf(“prim.out”,ios::out);
Бір объектімен тізбектеп бірнеше лекті байланыстыру қажет болса, онда ол
төмендегідей ретпен орындалады:
Ifstream myof;
. . .
myof(“prim.in”);
. . .
myof.close();
myof.open (“prim2.in”);
. . .
myof.close();
Файлмен мәлімет алмасу мүмкіндігінің режимін өзгерту – файлдық объектінің
сипатындағы екінші аргументін өзгерту арқылы жүзеге асады.
Мысалы, Ofsetream myof ( “prim.in”,ios::app | ios::nocreate); - мұндағы файл бар
болса ғана myof объектісі құрылып, байланыс орнатылады, себебі ios::nocreate
аргументі берілген, яғни файл болмаса, объект құрылмайтынын білдіреді. Ал,
153
ios::app аргументі файлға шығарылатын мәндер файлдың соңына қосылатынын
анықтайды.
Флаг-аргументтер биттік | - «немесе» амалының көмегімен біріктіріліп
анықтала алады.
Файлдық лекті анықтау барысында қолданылатын аргументтерді анықтайтын
флагтар төмендегідей:
флаг
Мағынасы
ios::in
Файл оқуға ашылады
ios::out
Файл жазуға ашылады
ios::ate
Объект құрылған соң, ағымды көрсеткіш файлдың
соңына орнатылады
ios::app
Мәндер файлдың соңына жазылады
ios::trunc
Егер файл бар болса, ол тазартылады
ios::nocreate
Файл болмаса, онда объект құрылмайды
ios::noreplace
Файл бар болса, онда объект құрылмайды
ios::binary
Файл екілік режимде ашылады (қалыпты жағдайда
тексттік режим)
feоf (FILE * fp) – функциясы файлдың соңын анықтайды.
Файлды жабу үшін:
Int fclose(FILE *fp) функциясы қолданылады, яғни файлдық көрсеткішпен
орнатылған байланысты үзеді.
Файлмен мәлімет алмасу үшін fstream класының объектісі де қолданылады:
Fstream io(“update.dat”, ios::in|ios::app); - бұл жағдайда көрсетілген файл мәліметті
оқуға және жазуға ашылады.
Seekg() файлдан оқу ал, seekp() файлға жазу барысында функциялары файлдың
ағымды позициясының маркерін басқаруға қолданылады.
Мысалы,
io.seekg(5, ios::cur) – оқу барысында маркерді ағымды орынынан 5 байтқа
жылжыту;
io.seekg(-7, ios::end); - маркерді соңынан бастап 7 байтқа жылжыту
керектігін білдіреді.
Аргументтер:
Io::cur – ағымды орынынан; Io::beg – файл басынан;
Io::end - файл соңынан жылжытылатынын білдіреді.
Файлдық лектің күйін анықтау функциялары:
Функция
Түсініктеме
eof()
Файл соңын кездестірсе, 0-дік емес мән қайтарады
fail()
Лекте қате кездессе 0- ден өзге мән қайтарады
bad()
Енгізу-шығару барысында мағыналы қате кетсе, нөлден өзге
мән қайтарады, онда лекпен жұмыс тоқтатылғаны дұрыс. Лек
күйінің биттік мәндері анықталмаса, 0-ге тең емес мән береді.
rdstate()
Мына тұрақтылардың бірін, яғнм лектің ағымды күйін
анықтайтын мәнді қайтарады:
154
Ios::goodbit - қате жоқ
Ios::eofbit – файл соңына жетті
Ios::failbit – форматтау немесе түрлендіру қатесі
Ios::badbit - маңызды қате
clear()
0-ге тең болса тазарту
12.2. Файлдық енгізу-шығару
Файлдан оқығанда Pascal-дағы секілді,
fprinf(fin,’формат’, <айнымалы>);
fscanf(fin,'формат', <айнымалы>);
fseek() функциясы:
Жалпы форматы:
Int fseek (FILE *str, long offset, int orig)
М, fseek (f, K, r)
Fseek функциясы f Көрсеткіші арқылы берілген файлдағы ағымды көрсеткішті К
байтқа жылжытады. Жылжыту:
- файлдың басынан (r=0)
- ағымды көрсеткіш тұрған (r=1)
- файлдың аяғынан (r=1) басталуы мүмкін.
Си- де r-дің мәні ретінде көрсету үшін қолданылатын 3 const қарастырылған:
SEEK_SET (файл басынан жылжу)
SEEK_CUR(ағымдағы позициядан бастау)
SEEK_END(файл соңынан)
Fseek() функциясы қызметі сәтті аяқталса 0-ді, әйтпесе EOF мәнін қайтарады.
Ftell()-функциясы файл басынан бастап ығысқан шамамен анықталады, яғни
long типті мән қайтарады, ағымды көрсеткіштің рынын анықтайды.
Ж.Т: long ftell(FILE*str)
Ftell(f)
Rewind функциясы ағымды көрсеткішті файлдың басынан орындайды.
rewind(FILE*str);
rewind(f) мынаған сәйкес мәнді қайтарады;
fseek(f, ol, seek_set);
Әдебиеттер
1. Керниган Б., Ритчи Д.,- Язык программирования Си. – М.: Финансы и
статистика, 1985 г.
2. Вирт Н. Алгоритмы и структуры данных: Пер. с анг.- М.: Мир, 1989 г.
3. Д.Кнут Искусство программирования для ЭВМ. Основные алгоритмы. М.:
Мир, 1976. 3.
4. Н.Культин., С/С++ в задачах и примерах – БХБ-Петербург, 2002 г.
5. Крис Паппас., Программирование на С и С++ - BHV, Киев, 2000 г.
6. Т. А. Павловская, А. Ю. Щупак С/С++ Структурное программирование:
Практикум- СПб.: Питер, 2005
7. Уэйт М . Язык Си. Руководство для начинающих: Пер. с англ. – М., Мир,
1988 г.
Достарыңызбен бөлісу: |