- •Гоувпо «Воронежский государственный технический университет»
- •Методические указания
- •Требования к выполнению и оформлению лабораторных работ
- •Теоретический материал
- •Лабораторная работа № 2 системное по для управления файлами и каталогами в программах пользователя Функции и состав ос
- •Работа с файлами и каталогами в среде Delphi
- •Средства системных модулей
- •Лабораторная работа № 3 управление памятью. Регистровая память
- •Лабораторная работа № 5. Разработка учебных программ и утилит
- •Лабораторная работа № 6. Разработка сервисных программ
- •Библиографический список
- •Содержание
- •394026 Воронеж, Московский просп., 14
Работа с файлами и каталогами в среде Delphi
При организации многих приложений требуется работа с файлами и каталогами (папками). В модулях System и SysUtils находятся многочисленные процедуры, функции, типы и константы, предназначенные для pa6oты файловой системой. При создании новой формы названия обоих модулей автоматически вносятся в раздел uses модуля формы. Если же подготовлен модуль, не связанный непосредственно с формой, то раздел uses следует дополнить самостоятельно.
Для работы с файловой системой предназначены четыре специальных компонента (FileListBox, DirectoryListBox, DriveComboBox, FilterComboBox), расположенные на вкладке Win3.l Палитры компонентов. Однако несмотря на название вкладки, использующие эти компоненты программы корректно работают и в 32-разрядных версиях Windows.
Работу с файлами соответствующих форматов поддерживают также отдельные компоненты и объекты, например Memo, ListBox, Picture и Clipboard.
Средства системных модулей
Для файловых операций часто используются средства системных модулей System и SysUtils.
Модуль System реализует средства низкого уровня, в том числе средства ввода/вывода, обработки строк, операций с числами и динамической памятью. Многие из этих средств используются компилятором Delphi.
Модуль SysUtils расширяет и дополняет возможности модуля System. В нем находятся средства, предназначенные для работы с дисками, каталогами и файлами, датой, временем, строками, определяются классы исключений, а также содержатся другие полезные процедуры, функции и константы.
Отдельные возможности модуля SysUtils базируются на соответствующих возможностях модуля System или дублируют их.
Для операций с атрибутами (табл. 2) и режимами открытия (табл. 3) файлов можно использовать именованные константы модуля SysUtils.
Таблица 2
Константы атрибутов файла
Константа |
Значение |
Назначение |
faReadOnly |
$000000001 |
Файл только для чтения |
faHidden |
$000000002 |
Скрытый файл |
faSysFile |
$000000004 |
Системный файл |
faVolumeID |
$000000008 |
Метка диска |
faDirectory |
$000000010 |
Каталог |
faArchive |
$000000020 |
Архивный файл |
faSymLink |
$000000040 |
Файл — символическая связь |
faAnyFile |
$000000047 |
Любой файл |
Каждая константа содержит единицу в соответствующем бите шестнадцатеричнoro числа. Для получения требуемого значения файловых атрибутов приведенные константы можно объединять с помощью поразрядной операции OR.
Например, параметр для работы с системными и скрытыми файлами получается так:
faHidden or faSysFile
В константе faAnyFile биты всех атрибутов установлены в единицу. Значение константы faAnyFile можно получить также следующим образом:
faAnyFile = faArchive or faDirectory or faVolumeID or faSysFile or faHidden or faReadOnly;
Константы режимов открытия файла служат для задания уровня доступа к открытому файлу, а также к потоку, например, в функции FileOpen.
Таблица 3
Константы режимов открытия файла
Константа |
Значение |
Режим открытия файла |
fmOpenRead |
$0000 |
Только для чтения |
fmOpenWrite |
$0001 |
Только для записи |
fmOpenReadWrite |
$0002 |
Для чтения и записи |
fmShareCompat |
$0004 |
Совместим с файлом, открытым по FCB |
fmShareExclusive |
$0010 |
Открыт для монопольного использования |
fmShareDenyWrite |
$0020 |
Закрыт для записи другим пользователем |
fmShareDenyRead |
$0030 |
Закрыт для чтения другим пользователем |
fmShareDenyNone |
$0040 |
Открыт для совместного использования |
fmClosed |
$D7B0 |
Закрыт |
fmInput |
$D7B1 |
Открыт для ввода |
fmOutput |
$D7B2 |
Открыт для вывода |
fmInOut |
$D7B3 |
Открыт для ввода/вывода |
Для удобства работы с именами файлов в модуле SysUtils вводится тип TFileName, который равен типу String.
Ряд подпрограмм модуля SysUtils предназначен для работы с каталогами.
Функция GetCurrentDir: string возвращает строку, содержащую значение текущего каталога Windows.
Для смены каталога можно использовать функцию SetCurrentDir(const Dir: string): Boolean.
Функции CreateDir (const Dir: string): Boolean и RemoveDir (const Dir: string): Boolean позволяют создать новый и удалить существующий каталог соответственно. Имя каталога задается параметром Dir. Удалить можно только пустой каталог. В случае успешного выполнения операции функции возвращают значение True, значение False — в противном случае.
Аналогичное назначение имеют процедуры GetDir, ChDir, MkDir и RmDir модуля System.
Для смены текущего каталога, кроме функции SetCurrentDir, можно также использовать диалоговое окно выбора каталога, вызываемое функцией SelectDirectory. Эта функция входит в состав модуля FileCtrl, и в случае ее использования следует подключить данный модуль в разделе uses.
При вызове функции SelectDirectory (var Directory: string; Options: TSelectDirOpts; HelpCtx: Longint) : Boolean параметр Directory задает каталог, который первоначально предлагается пользователю для выбора. В случае успешного выбора каталога и закрытия диалогового окна кнопкой ОК параметр Directory будет содержать имя каталога, а функция возвратит значение True. Параметр Options определяет параметры диалогового окна и может содержать набор перечисленных далее значений:
- sdAllowCreate (пользователь может в поле редактирования ввести несуществующий каталог). Создается при этом новый каталог или нет, зависит от значения sdPerformCreate.
- sdPerformCreate (применяется совместно с параметром sdAllowCreate). Если каталог, введенный пользователем, не существует, то он создается. Если этот параметр отключен, то возможно создание введенного каталога после закрытия диалога SelectDirectory.
- sdPrompt (применяется совместно с параметром sdAllowCreate). Служит для выдачи предупреждения о вводе пользователем несуществующего каталога и запроса на его создание. Создание каталога зависит от параметра sdPerformCreate.
Задание 1. Написать программу по работе с каталогами.
Ход выполнения работы:
Запустите среду Delphi.
Создайте форму, представленную на рис. 5, которая содержит следующие компоненты: Button, Label, Memo, Panel, BitBtn, MainMenu, SpeedButton.
Рис. 5. Экранная форма программы
Подключите модуль FileCtrl в разделе uses.
В процедуре события OnClick кнопки Просмотр текущего каталога надо объявить символьную переменную Path.
В самой процедуре написать следующий текст:
Path := GetCurrentDir;
LabelTekKat.Caption := ' Текущий каталог: ';
Memo1.Lines.Clear;
Memo1.Lines.Add(Path);
В процедуре события OnClick кнопки Смена каталога надо объявить символьную переменную Path и Path2 - Boolean.
В самой процедуре написать следующий текст:
Path2 := SetCurrentDir('C:\');
Path := GetCurrentDir;
LabelSmena.Caption := ' Измененный каталог: ';
if SelectDirectory(Path, [sdAllowCreate, sdPerformCreate, sdPrompt], 0)
then begin
Memo2.Lines.Clear;
Memo2.Lines.Add(Path);
end;
Сохраните файл с программой с уникальным именем.
Сохраните проект с уникальным именем.
Запустите программу на выполнение, проверьте ее работу.
Задание 2. Написать программу по выбору файла в каталоге и выдаче его атрибутов.
Задание 3. Написать программу, позволяющую пользователю обходить выбранный каталог и выводить список файлов и их атрибутов.
Оформить отчет по заданиям 2 и 3 лабораторной работы с распечаткой уникальных процедур и экранной формы программы и копии экранов результата работы программы.