Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Запись в файл(лекция).doc
Скачиваний:
6
Добавлен:
11.02.2016
Размер:
532.99 Кб
Скачать

Оголошення змінних типу файл

FILE *идентификатор;

Приклад FILE *f;

Открытие файла:

Відкриття файлу

Функція fopen() відкриває потік та зв’язує його з файлом, а після виконання повертає вказівник файлу. Якщо під час відкриття файлу виникла помилка тоді функція fopen() поверне вказівник на NULL.

Синтаксис функції:

*fopen( const char *ім_я_файлу, const char *режим)

ім_я_файлу – вказівник на символьний рядок, що включає повну назву (повний шлях та ім’я).

режим – вказівник на символьний рядок, що визначає режим доступу до файлу.

Табл. Допустимі значення параметру режим.

Параметр

Значення

r

Відкриття текстового файлу тільки для зчитування.

w

Створення й відкриття текстового файлу для додавання. Якщо файл з таким ім’ям існує, тоді він буде замінений новим.

a

Відкриття текстового файлу для додавання запису в кінець файлу, якщо він не існує то буде створений.

r+

Відкриття текстового файлу для зчитування та додавання.

w+

Створення й відкриття текстового файлу для додавання та зчитування. Якщо файл з таким ім’ям існує, тоді він буде замінений новим.

a+

Відкриття текстового файлу для додавання та зчитування запису в кінці файлу, якщо він не існує то буде створений.

rb

Відкриття бінарного файлу тільки для зчитування.

wb

Створення й відкриття бінарного файлу для додавання. Якщо файл з таким ім’ям існує, тоді він буде замінений новим.

ab

Відкриття бінарного файлу для додавання запису в кінець файлу, якщо він не існує то буде створений.

r+b, rb+

Відкриття бінарного файлу для зчитування та додавання.

w+b, wb+

Створення й відкриття бінарного файлу для додавання та зчитування. Якщо файл з таким ім’ям існує, тоді він буде замінений новим.

a+b, ab+

Відкриття бінарного файлу для додавання та зчитування запису в кінці файлу, якщо він не існує то буде створений.

Приклад: Вводимо з клавіатури символьний рядок та записуємо його у файл по одному символу.

#include <string.h>

#include <stdio.h>

#include <iostream>

using namespace std;

int main()

{

FILE *f;

char sf[40];

char str[100];

// оголошуємо файлову змінну

// змінна для повного імені файлу

printf("Введіть ім’я файлу: ");

gets(sf);

f=fopen(sf, "w");

//відкриття файлу для запису

if(f != NULL)

{

printf("Введіть символьний рядок : ");

gets(str);

for(int i=0;i < strlen(str);i++)

putc(str[i],f);

}

else

printf("Виникла помилка \n");

// якщо файловий вказівник не вказує на порожність, тоді виконуємо дії

fclose(f);

return 0;

}

// закриваємо файл

Приклад: Зчитування символів з текстового файлу та виведення їх на екран.

#include <string.h>

#include <stdio.h>

#include <iostream>

using namespace std;

int main()

{

FILE *f;

char sf[40];

char cs;

// оголошуємо файлову змінну

// змінна для повного імені файлу

printf("Введіть ім’я файлу: ");

gets(sf);

f=fopen(sf, "r");

//відкриття потоку роботи з файлом для зчитування

if(f != NULL)

{

// якщо файловий вказівник не вказує на порожність, тоді виконуємо дії

do

{

cs=getc(f);

//зчитування одного символу

cout<<cs;

//виведення символу на екран

}

while (cs!=EOF);

// зчитуємо поки не кінець файлу, тобто коли символ буде вказувати на кінець файлу, зчитування припиняться

}

else

printf("Виникла помилка \n");

fclose(f);

// закриваємо потік роботи з файлом

return 0;

}

Конструкція зчитування наведена в останньому прикладі може бути використана тільки для роботи з текстовим потоком, тому що при зчитування бінарного потоку при зчитуванні певного елементу в бінарному вигляді може призвести до прийняття зчитаного символу у вигляді EOF. Виходячи з вище сказаного доцільно використовувати функцію feof().

Підхід зчитування по одному елементу з текстового файлу

Підхід зчитування по одному елементу з текстового та бінарного файлу

do

{

while(!feof(f))

{

cs=getc(f);

cs=getc(f);

cout<<cs;

cout<<cs;

}

while (cs!=EOF);

}

Приклад запису символьних рядків у текстовий файл, після чого відбувається зчитування файлу по рядкам.

#include <string.h>

#include <stdio.h>

#include <iostream>

using namespace std;

int main()

{

FILE *f;

char sf[40];

char str[80];

// оголошуємо файлову змінну

// змінна для повного імені файлу

// змінна для символьного рядку

printf("Введіть ім’я файлу: ");

gets(sf);

f=fopen(sf, " w+");

//відкриття потоку роботи з файлом для запису та зчитування

if(f != NULL)

{

// якщо файловий вказівник не вказує на порожність, тоді виконуємо дії

// запис символьних рядків у файл

do

{

printf("Введіть рядок: ");

gets(str);

//зчитує символьний рядок

strcat(str,"\n");

//додаємо ознаку закінчення рядку

fputs(str,f);

//запис символьного рядку в файл

if (ferror(f))

printf("Виникла

помилка запису!");

// якщо виникне помилка тоді ferror(f) буде дорівнювати true

}

while(*str!='\n') ;

// введення призупиниться коли буде введено порожній рядок

// курсор знаходиться в кінці файлу, тому необхідно перевести його на початок

rewind(f);

//переводимо курсор на початок файлу

// зчитування символьних рядків та запис їх у файл

while (!feof(f))

{

fgets(str, 79, f);

//зчитування буде відбуватися доки не дійдемо до кінця файлу

// fgets(str, 79, f) – зчитує у змінну str символьний рядок до кінця рядка або довжиною 78 з файлу, що пов’язаний з файловим вказівником f

if (ferror(f))

printf("Виникла помилка

зчитування!");

// якщо виникне помилка тоді ferror(f) буде дорівнювати true

printf(str);

}

//виводимо на екран

}

else

printf("Виникла помилка \n");

fclose(f);

// закриваємо потік роботи з файлом

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]