With OpenDialog1, Memo1 do

СРЕДА ПРОГРАММИРОВАНИЯ Turbo DELPHI

 

 

Лабораторная работа №5

 

Тема: «Файлы»

 

Ассистент Кунина М.В.

 

 

Волгоград 2014


 

Файл — это именованная область данных на диске или любом другом внешнем носителе. В программе файл предстает как последовательность элементов некоторого типа. Так как размер одного файла может превышать объем всей оперативной памяти компьютера, доступ к его элементам выполняется последовательно с помощью процедур чтения и записи.

В зависимости от типа элементов различают три вида файлов:

· текстовый файл; элементами такого файла являются текстовые строки (текстовые файлы);

· файл из элементов фиксированного размера; элементами такого файла чаще всего являются записи (типизированные файлы);

· файл из элементов переменного размера (нетипизированный файл); такой файл рассматривается просто как последовательность байтов.

 

Файловые типы и файловые переменные

 

Доступ к файлу осуществляется с помощью переменных файлового типа:

· TextFile – тестовый файл, представляющий собой набор символьных строк переменной длины;

· File of <тип> – типизированный файл, представляющий собой набор данных указанного типа;

· File – нетипизированный файл, представляющий собой набор неструктурированных данных.

Например, var f1:textfile; f2:file of integer; f3:file of char; f4:file;

Здесь f1 –текстовый файл, f2 и f3 –типизированные файлы, f4 – нетипизированный файл.

 

 

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

 

Стандартные подпрограммы для доступа к файлам

 

Для файла существует понятие текущейпозиции. Она показывает номер элемента, который будет прочитан или записан при очередном обращении к файлу. Чтение-запись каждого элемента продвигает текущую позицию на единицу вперед.

Перед использованием файловой переменной она должна быть связана с внешним файлом с помощью вызова процедуры

 

AssignFile(<файловая переменная>,<имя файла>);

 

Здесь <файловая переменная> - имя переменной файлового типа, объявленной в программе; <имя файла> – символьная строка, содержащая имя файла.

 

Если файл находится в одной папке с обрабатывающей его программой, то достаточно указать только имя файла, в противном случае надо указать полный путь к файлу, например,’ D:\STUDENTS\MIB211\z1.txt’.

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


 

 

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

 

Reset(<файловая переменная >);

 

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

 

!!! Текстовый файл, открытый процедурой reset, доступен только для чтения, для типизированных и нетипизированных файлов, открытых процедурой reset допускается чтение и запись

 

Новый файл можно создать и открыть для записи с помощью процедуры Rewrite(<файловая переменная>);

Если файл с указанным именем уже существует, то он удаляется и на его месте создается новый пустой файл. Текущая позиция в файле устанавливается на начало файла, т.е. файловый указатель устанавливается на элемент файла с порядковым номером 0.

 

!!! Если процедура rewrite открывает текстовый файл, то он становится доступным только для записи, для типизированных и нетипизированных файлов, открытых процедурой rewrite допускается чтение и запись

 

Текстовый файл может быть открыт процедурой Append(<файловая переменная>);

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

 

После завершения обработки файл должен быть закрыт процедурой CloseFile (<файловая переменная>);

Процедура closeFile закрывает открытый файл, но не разравает связь с файла с файловой переменной, поэтому его можно открыть без повторного связывания процедурой assignFile.

 

Процедуры

 

ERASE(VAR F) уничтожит файл f;

 

Rename(VAR f; NewName:string) - переименует существующий файл. !!! Перед выполнением этих процедур файл должен быть закрыт.

Для реализации программы чтения и сохранения текстового файла размещаем на форме текстовый редактор Memo, две кнопки Button и для ввода имени файла компонент Edit. Пример см. в папке «Текстовые файлы».

 

Диалоговые окна

 

Delphi диалоги выбора файла позволяют указать программе, с каким файлом мы хотим работать. На вкладке палитры компонентов Dialogs находятся компонент Delphi OpenDialog и компонент Delphi SaveDialog. Все Delphi диалоги, находящиеся на этой вкладке, в том числе и Delphi диалоги выбора файла, невизуальные, т.е. при переносе


 

их на Форму в работающей программе их не видно, они видны только на этапе конструирования. Компонент Delphi OpenDialog позволяет открыть в нашей программе стандартное Windows-окно диалога открытия файла, компонент Delphi SaveDialog -окно диалога сохранения.

 

Delphi диалоги выбора файла сами по себе ничего не делают, а только предоставляют настройки, сделанные пользователем при выборе файла. Самый важный метод Delphi диалоговExecute. Он срабатывает в момент нажатия кнопки "открыть" или "сохранить" в окне выбора файла.

 

Компоненты Delphi, которые умеют работать с файлами, т.е. читают и сохраняют своё содержимое, строки типа String, в файл текстового формата. Это компоненты ListBox, ComboBox и Memo, расположенные на вкладке Standard Палитры компонентов. Для примера введём в программу возможность выбора файла для загрузки в редактор Memo, и сохранения его после редактирования.

 

Размещаем на Форме оба Delphi диалога, текстовый редактор Memo, и три кнопки Button. В свойство Caption одной из них записываем "Открыть...", другой -"Сохранить", третьей - "Сохранить как..."

 

 

В обработчике OnClick кнопки "Открыть..." пишем:

 

if OpenDialog1.Execute then Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

 

В результате выбора файла свойство FileName компонента OpenDialog получает значение полного адреса выбранного файла, который мы и вставляем в функцию загрузки файла компонента Memo.

 

Если программа использует несколько раз выражение OpenDialog1.FileName, то в Delphi для такого случая есть так называемый "оператор присоединения" with. Он используется для любых объектов, имеющих длинный "хвост" из свойств, которые приходится записывать многократно. Вот как он записывается:

 

With Объект do begin


 

end;

 

Перепишем фрагмент загрузки файла с использованием оператора присоединения:

 

with OpenDialog1, Memo1 do

if Execute then Lines.LoadFromFile(FileName);

Так как свойства компонентов OpenDialog и SaveDialog одинаковы, сохранение текста выглядит абсолютно аналогично. Создаём обработчик нажатия кнопки "Сохранить как..." и пишем: