Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 40076.doc
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
392.19 Кб
Скачать

Работа с файлами и каталогами в среде 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. Написать программу по работе с каталогами.

Ход выполнения работы:

  1. Запустите среду Delphi.

  2. Создайте форму, представленную на рис. 5, которая содержит следующие компоненты: Button, Label, Memo, Panel, BitBtn, MainMenu, SpeedButton.

Рис. 5. Экранная форма программы

  1. Подключите модуль FileCtrl в разделе uses.

  2. В процедуре события OnClick кнопки Просмотр текущего каталога надо объявить символьную переменную Path.

  3. В самой процедуре написать следующий текст:

Path := GetCurrentDir;

LabelTekKat.Caption := ' Текущий каталог: ';

Memo1.Lines.Clear;

Memo1.Lines.Add(Path);

  1. В процедуре события OnClick кнопки Смена каталога надо объявить символьную переменную Path и Path2 - Boolean.

  2. В самой процедуре написать следующий текст:

Path2 := SetCurrentDir('C:\');

Path := GetCurrentDir;

LabelSmena.Caption := ' Измененный каталог: ';

if SelectDirectory(Path, [sdAllowCreate, sdPerformCreate, sdPrompt], 0)

then begin

Memo2.Lines.Clear;

Memo2.Lines.Add(Path);

end;

  1. Сохраните файл с программой с уникальным именем.

  2. Сохраните проект с уникальным именем.

  3. Запустите программу на выполнение, проверьте ее работу.

Задание 2. Написать программу по выбору файла в каталоге и выдаче его атрибутов.

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

Оформить отчет по заданиям 2 и 3 лабораторной работы с распечаткой уникальных процедур и экранной формы программы и копии экранов результата работы программы.