Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Как избежать ошибок выполнения
Иногда возникает ситуация, в которой операционная система не может открыть файл, указанный в функции fopen(). Причиной этому может быть отсутствие места на диске. Не исключена и возможность того, что указанный файл просто не существует. Возможна также ситуация, когда вы пытаетесь распечатать данные на принтере, а принтер не включен, или в нем отсутствует бумага. Если вы попытаетесь использовать файл, который нельзя открыть, программа остановится в результате ошибки выполнения. Чтобы избежать подобного аварийного выхода из программы, можно использовать инструкцию if, которая будет останавливать программу в случае невозможности открытия файла. С помощью следующих инструкций, использующих if, можно открыть файл и проверить, действительно ли он открыт: if ((cdfile = fopen(" CD.DAT", " w" )) == NULL) { puts(" Невозможно открыть файл" ); exit(); }NULL — это специальное значение, определенное в файле заголовков STDIO.H. Если произошла ошибка и открыть файл невозможно, система вернет значение NULL вместо адреса файловой структуры, и выполнение программы прекратится. Аналогичное условие можно внести и в инструкции печати информации на принтере: if ((cdfile = fopen(" prn", " w" )) == NULL) { puts(" Включите принтер и запустите программу снова" ); exit(); }
Если принтер не включен, на экране появится сообщение о том, что надо включить принтер, а затем запустить программу еще раз. Можно использовать и цикл while, с тем чтобы дать пользователю возможность исправить ошибку: while ((cdfile = fopen(" prn", " w" )) == NULL) { puts(" Включите принтер и нажмите Enter" ); flag = getchar(); }Заметьте, что в некоторых системах нет необходимости в подобных сообщениях. Если принтер не готов к печати, операционная система выведет на дисплей собственное сообщение, предлагающее пользователю либо остановить выполнение операции (abort), либо попробовать повторить ее еще раз (retry). При появлении такого сообщения следует включить принтер и нажать клавишу R, чтобы повторить попытку вывода на печать. Как закрыть файл После окончания записи в файл или чтения из файла необходимо его закрыть, то есть прервать связь между файлом и программой. Это осуществляется с помощью инструкции fclose(file_pointer);Закрывая файл, мы получаем гарантию, что вся информация, имевшаяся в буфере, действительно записана в файл. Если выполнение программы заканчивается до закрытия файла, какая-то не попавшая на диск часть информации может остаться в буфере, в результате чего она будет утрачена. Кроме того, не будет надлежащим образом записан символ конца файла, и в следующий раз программа не сможет получить доступ к файлу. Следует добавить, что закрытие файла освобождает указатель, после чего он может быть использован с другим файлом или для выполнения других операций с тем же файлом. В качестве примера предположим, что вы хотите создать файл, записать в него данные, а затем убедиться, что информация записана правильно. Для этого в программе можно использовать структуру, приведенную в Листинге1. Листинг 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(), осуществляется ввод последовательности символов, которые затем записываются в файл с помощью функции putc(). Синтаксис записи putc() таков: С теми же аргументами может использоваться и функция fputc(). Цикл выполняется до тех пор, пока не нажата клавиша Enter, которая вводит код «возврат каретки» (\r), после чего файл закрывается. Последнее изменение этой страницы: 2017-03-08; Просмотров: 463; Нарушение авторского права страницы Главная | Случайная страница | Обратная связь |