Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Начало работы в Delphi.doc
Скачиваний:
16
Добавлен:
18.11.2019
Размер:
428.03 Кб
Скачать

Ошибки открытия файла

Попытка открыть файл может завершиться неудачей и вызвать ошибку времени выполнения. Причин неудачи открытия файла может быть несколько. Например, программа может попытаться открыть файл на гибком диске, который не готов к работе (не закрыта шторка накопителя или диск не вставлен в накопитель). Другая причина - отсутствие открываемого в режиме добавления файла.

Программа может взять на себя задачу контроля за результатом выполнения инструкций открытия файла. Сделать это можно, проверив значение функции IOResult (Input - Output Result - результат ввода-вывода). Функция IOResult возвращает 0, если операция ввода-вывода завершилась успешно, в противном случае - не ноль.

Для того, чтобы программа смогла проверить результат выполнения операции ввода-вывода, нужно разрешить ей это делать. Для этого надо перед инструкцией вызова процедуры открытия файла поместить директиву компилятору  - строку {$I-}, которая запрещает автоматическую обработку ошибок ввода-вывода (эта директива сообщает компилятору, что программа берет на себя контроль за ошибками). После инструкции открытия файла следует поместить директиву {$I+}, восстанавливающую режим автоматической обработки ошибок ввода-вывода. 

Алгоритм добавления в файл может примерно таким:

Открыть файл в режиме добавления

ОШИБКА ??? 

ДА - Открыть файл в режиме замены (т.е. создание нового файла)

НЕТ - конец алгоритма

Для наглядности приведу пример программы, чтобы вам стало понятнее как же использовать этот алгоритм.

AssignFile(f,'D:\testfile.txt'); {$I-} Append(f);{Пытаемся открыть для добавления} {$I+} If IOResult <> 0 //т.е. ошибка открытия then Rewrite(f);//создадим новый файл

Закрытие файла

Перед завершением работы программа должна закрыть все открытие файлы. Это делается перед вызовом процедуры Close. Процедура close имеет один параметр - имя файловой переменной. Пример использования процедуры:

Close(f);

Также можно воспользоваться процедурой CloseFile(f);

Пример программы записи в файл

Чтобы окончательно во всем разобраться сделаем программу. Она будет вести простую базу данных. При каждом ее запуске на экране будет появляться диалоговое окно (рисунок 19), в поля которого пользователь может ввести дату и температуру воздуха.

Рисунок 19. Вид нашей программы.

Дата вводится в поля Edit1 (номер месяца) и Edit2 (число - номер дня в месяце). Для ввода температуры предназначено поле Edit3. При создании формы программы свойству Enabled кнопки "Добавить" (Button1) надо присвоить значение False. Текст программы приведен на листинге 7.

Листинг 7. Текст программы "Погода".

unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form1: TForm1; f:textfile; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin {Проверим корректоность ввода данных} if (length(edit1.text)=0) or (length(edit2.text)=0) or (length(edit3.text)=0) then showmessage('Вы не заполнили все поля!!!') else writeln(f,edit1.text,' ',edit2.text,' ',edit3.text); end; procedure TForm1.FormActivate(Sender: TObject); begin AssignFile(f,'D:\weather.txt'); {$I-} Append(f);{Пытаемся открыть для добавления} {$I+} If IOResult = 0 then button1.Enabled:=true else begin rewrite(f); if IOResult = 0 then Button1.Enabled:=true else showmessage('Ошибка создания файла'); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin closefile(f); end; end.

Файл базы данных открывает процедура TForm1.FormAcivate, которая запускается автоматически при активизации формы приложения. Если операция открытия файла завершается успешно, то процедура делает доступной кнопку "Добавить". В противном случае кнопка "Добавить" остается недоступной и пользователю ничего не остается, как закрыть окно программы.

Процедура TForm1.Button1Click (процедура обработки события OnClick) запускается щелчком кнопки "Добавить" (Button1). В результате введенная информация записывается в базу данных - файл weather.txt. Перед выполнением записи программа проверяет, все ли поля формы заполнены, и, если не все, то выводит информационное сообщение. В результате работы процедуры в конец файла будет добавлена строка, содержащая три числа: номер месяца, числа и температуру воздуха.

Закрывает базу данных процедура TForm1.FormClose, которая обрабатывает событие OnClose, возникающее при закрытии пользователем формы приложения.