- •Имена unc
- •1.1.2. Процедуры и функции win32 для работы с файлами
- •1. Создание или открытие файла
- •2. Запись в файл
- •3.Чтение из файла
- •4. Закрытие файла
- •1.1.3. Пример программы, использующей функции win32 для доступа к файлам и каталогам
- •1.1.4. Функции delphi для работы с файлами
- •1. Связывание логического и физического имен файлов
- •2. Типы файлов
- •2. Открытие файла
- •4. Чтение и запись текстовых файлов
- •5. Чтение и запись типизированных файлов
- •6. Чтение и запись нетипизированных файлов
- •7. Закрытие файлов
- •8. Проверка окончания файла
- •9. Файловый ввод/вывод с помощью компонентов
- •10. Обработка ошибок при работе с файлами в delphi
- •1.1.5. Пример программы, использующей функции delphi для доступа к файлам и каталогам
- •1.2. Задание к лабораторной работе
- •Контрольные вопросы
7. Закрытие файлов
После выполнения различных операций чтения и записи файл должен быть закрыт процедурой CloseFile:
procedure CloseFile(var F: File);
8. Проверка окончания файла
При операциях ввода/вывода проверять окончание файла можно функцией Eof(F: File), возвращающей TRUE при достижении конца файла.
9. Файловый ввод/вывод с помощью компонентов
В Delphi работа с текстовыми файлами может осуществляться и без непосредственного обращения к функциям Object Pascal. Для этого можно использовать методы LoadFromFile и SaveToFile, имеющиеся у классов TStrings и TStringList. Эти классы описывают списки строк и обладают множеством методов, позволяющих манипулировать строками.
Многие свойства компонентов имеют тип TStrings и, следовательно, в них можно загружать текстовые файлы. Например, прочитать тестовый файл, а также файл документа в обогащенном формате RTF можно в компонент RichEdit следующим образом:
RichEditl.Lines.LoadFromFile('Test.rtf'’);
После того, как пользователь что-то изменил в тексте, его можно сохранить в файле оператором
RichEditl.Lines.SaveToFile('Test.rtf'’);
Формат, в котором сохраняется текст, определяется значением свойства PlainText компонента RichEdit. Если PlainText = FALSE (это значение принято по умолчанию), то файл записывается в формате RTF. Если вам желательно сохранить файл в текстовом формате, то перед сохранением текста в файл надо установить PlainText в TRUE.
Аналогичным образом можно работать и с компонентом Memo. Только в этом случае нет необходимости думать о формате, так как Memo работает только с текстовым форматом.
Если не требуется отображать текст пользователю, а надо просто прочитать содержимое некоторого текстового файла, обработать текст и сохранить его в файле, можно сделать это, например, следующим образом. Объявить переменную списка строк типа TStringList, в которой будет храниться текст файла. В момент создания формы или в момент, когда надо прочитать файл, разместить в памяти эту переменную. Например:
var List: TStringList;
……..
List := TStringList.Create;
После этого можете читать в переменную List файл:
List.LoadFromFile('test.txt' ) ;
Далее можно работать с этим текстом методами, свойственными типу TStringList: Add, Delete и т.п. В заключение можно сохранить измененный текст в файле и удалить из памяти уже ненужный список:
List.SaveToFile('test.txt');
List.Free;
Через компоненты Delphi можно работать не только с текстовыми файлами, но и с файлами изображений и мультимедиа.
10. Обработка ошибок при работе с файлами в delphi
При работе с файлами, при чтении и записи в них каких-то данных возможны различные ошибки. Если не принять соответствующих мер, то эти ошибки приведут к прерыванию работы программы. Предотвратить это можно двумя путями:
-
Первый предполагает обработку исключений InOutError, поле errorcode которых содержит информацию о конкретном виде ошибки.
-
Второй предполагает применение опции {$I-}, отключающей генерацию исключений ошибок ввода/вывода, и дальнейшее обращение к функции lOResult, возвращающей код ошибки и сбрасывающей его в 0 (так что повторное обращение к lOResult бессмысленно). После обработки операции ввода/вывода контроль ошибок можно снова включить опцией {$I+}. В этом случае общая организация работы с файлами строится примерно по такой схеме:
AssignFile(F, OpenDialogl.FileName);
{$I-}
Reset (F) ;
($I+}
I:=IOResult;
if I <> 0 then <операторы обработки кода ошибки> else ...
{$I-}
<операторы чтения или записи>
{$I+}
I:=IOResult;
if I <> 0 then <операторы обработки кода ошибки>
CloseFile(var F: File);