Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лб инф передел / C++ / Алиса / Информатика / ПерваяПрограммаС.doc
Скачиваний:
57
Добавлен:
15.04.2015
Размер:
3 Мб
Скачать
☆

Как закрыть файл

После окончания записи в файл или чтения из файла необходимо его закрыть, то есть прервать связь между файлом и программой. Это осуществляется с помощью инструкции

fclose(file_pointer);

Закрывая файл, мы получаем гарантию, что вся информация, имевшаяся в буфере, действительно записана в файл. Если выполнение программы заканчивается до закрытия файла, какая-то не попавшая на диск часть информации может остаться в буфере, в результате чего она будет утрачена. Кроме того, не будет надлежащим образом записан символ конца файла, и в следующий раз программа не сможет получить доступ к файлу.

Следует добавить, что закрытие файла освобождает указатель, после чего он может быть использован с другим файлом или для выполнения других операций с тем же файлом. В качестве примера предположим, что вы хотите создать файл, записать в него данные, а затем убедиться, что информация записана правильно. Для этого в программе можно использовать структуру, приведенную в Листинге12.1.

Листинг 12.1. Использование одного указателя файла в двух операциях.

FILE *cdfile;

if((cdfile = fopen("CD.DAT", "w")) == NULL)

{

puts("Невозможно открыть файл");

exit();

}

/* Здесь должны располагаться инструкции записи в файл */

fclose(cdfile);

if((cdfile = fopen("CD.DAT", "r")) == NULL)

{

puts("Невозможно открыть файл");

exit();

}

/* В этом месте должны быть записаны

инструкции чтения из файла */

fclose(cdfile);

Здесь файл сначала открывается с использованием режима доступа "w", затем в него записывают данные. Во второй раз файл открывается с использованием режима доступа "r", что позволяет прочитать данные и вывести их на экран.

Некоторые компиляторы позволяют обеспечить запись всех данных в файл путем очистки буфера с помощью функции

flush()

Эта функция позволяет без закрытия файла очистить буфер и записать все имеющиеся в нем данные на диск или направить их на принтер.

Функции ввода и вывода

Существует несколько способов передачи данных в файл и получения их из файла в зависимости от используемой функции:

  • посимвольная запись данных в файл или вывод их на принтер с использованием функции putc() или fputc();

  • посимвольное чтение данных из файла с использованием функции getc() или fgetc();

  • построчная запись данных в файл или вывод их на принтер с использованием функции fputs();

  • построчное чтение данных из файла с использованием функции fgets();

  • форматированный вывод символов, строк или чисел на диск или на принтер с помощью функции fprintf();

  • форматированный ввод символов, строк или чисел из файла с помощью функции fscanf();

  • запись целой структуры с использованием функции fwrite();

  • чтение целой структуры с использованием функции fread().

Работа с символами

Посимвольная передача данных является самой основной формой файловых операций. Хоть она и не принадлежит к числу широко распространенных на практике способов обращения с информацией, тем не менее, она хорошо иллюстрирует основные принципы работы с файлами. В приведенной ниже программе происходит посимвольная запись данных в файл, которая продолжается до тех пор, пока не нажата клавиша Enter:

/*fputc.c*/

#include

main()

{

FILE *fp;

char letter;

if((fp = fopen("MYFILE","w"))==NULL)

{

puts("Невозможно открыть файл");

exit();

}

do

{

letter=getchar();

fputc(letter, fp);

}

while(letter != '\r');

fclose(fp);

}

Файл открывается с режимом доступа "w". Если файл с именем MYFILE не существует к моменту выполнения программы, он будет создан. В цикле do, с помощью функции getchar(), осуществляется ввод последовательности символов,

Буферизированный ввод функции getchar()

Если в вашем компиляторе функция getchar() используется для буферизированного ввода, то для ввода отдельных символов, предназначенных для записи в дисковый файл, вы можете применить вместо нее функцию getche(). В этом случае цикл do...while можно заменить циклом while:

while ((letter = getche())) != '\r')

которые затем записываются в файл с помощью функции putc(). Синтаксис записи putc() таков:

putc(char_variable, file_pointer);

С теми же аргументами может использоваться и функция fputc().

Цикл выполняется до тех пор, пока не нажата клавиша Enter, которая вводит код «возврат каретки» (\r), после чего файл закрывается.

Соседние файлы в папке Информатика