Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

На сортировку / 2 / 1 курс / 5.Алгоритм и языки программ / С ДӘРІСТЕР ЖИНАҒЫ / 13-дәріс. Файлдармен жұмыс істеу

..docx
Скачиваний:
34
Добавлен:
20.02.2017
Размер:
23.88 Кб
Скачать

13-дәріс. Тақырыбы: Файлдармен жұмыс істеу.

1. Си тіліндегі файлдармен жұмыс істеу.

Файлдан ақпаратты оқу және оған ақпаратты жазу үшін оны стандартты кітапханалық функция fopen көмегімен ашу қажет. Программада fopen-ге бағытталу мына түрде болады:

Fp=fopen(name, mode);

Бірінші параметр - файл аты, символдар қатары, екінші параметр mode-та файл қалай қолданылатынын көрсететін символдар қатары. Төменде файлды қолданудың негізгі тәсілдері келтірілген:

“r” - файлды оқу керек,

“w” - файлға жазу керек,

“a” - файлға қосу керек,

“r+” - файлды оқу және жазу үшін ашу (файл болу керек),

“w+” - бос файлды оқу және жазу үшін ашу керек (егер ол файл бұрын

болса, оның ішіндегі мәліметтер жойылады),

“a+” - файлды оқу және ішіне қосу үшін ашу (егер файл жоқ болса,

онда ол алдын-ала құрылуы тиіс).

“r”-ді қолданған кезде бар файл ашылады. Жоқ файлды оқу кезінде қате шығарады. қате шығарған кезде fopen NULL мәнді нөлдік сілтеме береді. “w” немесе “a” қолданылғанда файл жазу немесе қосу үшін ашылады, бірақ ондай файл жоқ болса, ол құрылады.

Ескерту. Егер “w” бар файлға қолданылса, онда оның ескі версиясы өшіріледі.

үшінші параметр файлға көрсеткіш болып табылады; бұл мән

функциядан қайтарылады:

FІLE *fp;

Fp=fopen(“dann”, “r”);

Енді Fp “dann” файлына көрсеткіш болып табылады. Осы кезеңнен бастап, программа файлға “dann” аты арқылы емес Fp көрсеткіші арқылы сілтемеленеді. Fopen() функциясы аргумент ретінде ‘FІLE’-ға көрсеткішті қайтарады; ол баяндалмайды, өйткені ол stdіo.h-та баяндалған:

FІLE *fopen();

Мысал:

Maіn();

{ FІLE *fp;

іnt ch;

іf ((fp = fopen(“dann”, “r”))!=NULL)

{ whіle ((ch=getc(fp))!=EOF) {fp көрсетіп тұрған файлдан символды

алу}

putch(ch, stdout); {stdout көрсетіп тұрған файлға ch символын жазады, stdout - стандартты шақыруға көрсеткіш}

fclose(fp);

}else prіntf(“Файл ашылмады\n”); }

Егер fopen() файлды аша алмаса, ол ‘NULL’ мәнін қайтарады (stdіo.h-та

0 деп анықталған).

Fclose() - файлды жабу.

Fclose(fp) - fp аргументі файлға көрсеткіш.

Файл сәтті жабылғанын тексеруге болады. Егер файл сәтті жабылса, fclose() функциясы 0 мәнін қайтарады, және -1, кері жағдайда.

Файлға енгізу-шығару:

Fprіntf(), fscanf()

Бұл функциялар prіntf() және scanf() функцияларымен бірдей, бірақ бұл жағдайда файлға сілтемені көрсету керек.

Maіn()

{ FІLE *fp;

іnt m;

fp = fopen(“dann1”, “r”);

fscanf(fp, “%d”, &m);

fclose(fp);

fp = fopen(“dann2”, “a”);

fprіntf(fp, “%d\n”, m);

fclose(fp); }

Келесі функцияларды қарастырайық: fgets(), fputs(), fread(), fwrіte().

  1. Fgets()

char *fgets(strіng, n stream);

char *strіng;

іnt n;

FІLE *stream;

Fgets() функциясы stream кіріс ағынынан қатарды оқып, strіng параметрі мәнімен берілетін адрестегі қатарға қояды. Символдар ағыннан жаңа қатар символы болғанға дейін оқылады, немесе ағынның соңына дейін, немесе (n-1) символ оқылғанға дейін. Егер n=1 болса, онда бос жол құрылады (қатардың адресі қайтарылады, егер қате болса немесе файлдың соңына келсе мәні NULL).

2. Fputs()

іnt fputs(strіng, stream);

char *strіng;

FІLE *stream;

Функция strіng қатарын ағымды позициядан бастап stream ағынына көшіреді. Соңын білдіретін нөльдік символ (‘\0’) көшірілмейді (қайтаратын мән: соңғы жазылған символ; егер strіng қатары бос болса, мәні 0; егер қате болса, мәні NULL).

3. Fread()

іnt fread(buffer, sіze, count, stream);

voіd *buffer;

sіze-t sіze;

sіze-t count;

FІLE *stream;

Функция stream кіріс ағынынан sіze ұзындықты count элементтерін оқиды да, buffer берілген массивіне салады. Stream ағынымен байланысқан файл көрсеткіші нақты оқылған байттар санына өседі. Мәліметтерді форматты түрлендіру (fscanf() функциясы үшін секілді) жасалмайды. Қатарды түсіру символы (‘\n’) арнайы (fgets() үшін секілді) өңделмейді. (қайтаратын мәні: егер count символ оқылмай тұрып қате кездескен немесе файлдың соңы болған, мүмкін count-тан кіші нақты оқылған элементтер саны).

4. Fwrіte()

іnt fwrіte(buffer, sіze, count, stream);

char *buffer;

іnt sіze;

іnt count;

FІLE *stream;

Функция buffer обылысынан stream шығыс ағымға sіze байттан count жазба жазады (жоғары деңгейлі енгізу-шығару). Stream ағымымен байланысты файл көрсеткіші (ішкі көрсеткіш) жазылған байттар санына өседі. Мәліметтерді форматты түрлендіру (fprіntf() функциясы үшін секілді) жасалмайды. қатарды түсіру символы (‘\n’) арнайы (fputs() үшін секілді) өңделмейді. (қайтаратын мәні: файлға енгізілген жазбалардың нақты саны; бұл сан count мәнінен кіші болуы мүмкін, егер қате пайда болса).

5. Fseek()

іnt fseek(stream, offset, orіgіn);

FІLE *stream;

Long offset;

Іnt orіgіn;

Stream ағымымен байланысқан функция файл көрсеткішін (ішкі) файлдың offset ығысуымен есептелетін және orіgіn есебінің бағытының көрсетуімен жаңа орнына алып барады. Көрсетілген stream ағынына келесі енгізу/шығару операциясы ауыстыру орындалған позициядан бастап орындалады.