Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС СФМЭИ.doc
Скачиваний:
22
Добавлен:
17.09.2019
Размер:
1.37 Mб
Скачать

9.2.2. Функции для работы с объектом «уведомление об изменении файловой системы»

Для создания объекта «уведомление об изменении файловой системы» применяется функция FindFirstChangeNotification:

function FindFirstChangeNotification(lpPathName: PChar;

bWatchSubtree: BOOL; dwNotifyFilter: DWORD): THandle;

где lpPathName – указывает стартовый каталог. Можно указать как корневой каталог диска, так и любой подкаталог. Указав подкаталог, приложение уже не получит уведомлений о событиях, происшедших в «вышестоящих» каталогах. Для наблюдения за деревьями каталогов, расположенных на разных дисках, надо сделать несколько вызовов FindFirstChangeNotification — по одному на каждый исследуемый диск.

bWatchSubtree – сообщает системе, нужно ли наблюдать и за подка­талогами, входящими в каталог lpPathName. Если он равен FALSE, то посылаются уведомления лишь о событиях, происшедших непосредственно в указанном ка­талоге.

dwNotifyFilter: – указывает тип интересующих изменений и представ­ляет собой набор флагов, комбинируемых побитовой операцией OR. Возможные значения параметра fdwFilter приведены в таблице 9. 1.

Таблица 9.1 Возможные значения апраметра dwNotifyFilter:

Флаг

Описание

FILE_NOTIFY_CHANGE_FILE_NAME

Создание, переименование или удаление файла

FILE_NOTIFY_CHANGE_DIR_NAME

Создание, переименование или удаление каталога.

FILE_NOTIFY_CHANGE_ATTRIBUTES

Изменение атрибута файла

FILE_NOTIFY_CHANGE_SIZE

Изменение размера файла.

FILE_NOTIFY_CHANGE_LAST_WRITE

Изменение времени последней записи в файл

FILE_NOTIFY_CHANGE_SECURITY

Изменение дескриптора защиты (security descriptor) файла или каталога.

Система часто прибегает к буферизации изменений в файле, пример, размер файла не изменяется до тех пор, пока информация из буфера не переписана на диск. Уведомление об изменении размера файла отправляет только после фактической записи данных на диск, а не после их модификации программой.

При успешном завершении FindFirstChangeNotification возвращает дескриптор, который программа может использовать при вызове таких синхронизирующих функций, как WaitForSingleObject или WaitForMultipleObjects. Если FindFirstChangeNotification передан неверный параметр (например, путь к исследуемому каталогу), функция возвращает INVALID_HANDLE_VALUE.

Для перевода объекта «уведомление об изменении файловой системы» применяется функция FindNextChangeNotification:

function FindNextChangeNotification(hChangeHandle: THandle): BOOL;

где hChangeHandle – дескриптор объекта «уведомление об изменении файловой системы», созданного функцией FindFirstChangeNotification. При успешном выполнении функция FindNextChangeNotification возвращает значение TRUE.

Для закрытия объекта «уведомление об изменении файловой системы» применяется функция FindCloseChangeNotification:

function FindCloseChangeNotification(hChangeHandle: THandle): BOOL;

где hChangeHandle – дескриптор объекта «уведомление об изменении файловой системы», созданного функцией FindFirstChangeNotification. При успешном выполнении функция FindCloseChangeNotification возвращает значение TRUE.

Для просмотра файлов и каталогов используются функции FindFirst и FindNext.

Функция FindFirst выделяет в памяти необходимые ресурсы для поиска файлов в каталоге и имеет вид:

function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;

где Path – определяет шаблон поиска. Например, если параметр Path равен '.\test\*.*', то будет осуществляться поиск всех файлов в каталоге test.

Attr – определяет атрибуты файлов, для которых производится поиск. Возможные значения атрибутов приведены в таблице 9.2. Атрибуты можно комбинировать с помощью операции логического «ИЛИ» («or»).

F – структура TSearchRec, в которую при успешном выполнении функции заносятся результаты поиска. Структура TSearchRec имеет вид:

TSearchRec = record

Time: Integer; // Время последнего изменения файла

Size: Integer; //Размер файла

Attr: Integer; //Атрибуты файла

Name: TFileName; //Имя и расширение файла

ExcludeAttr: Integer;

FindHandle: THandle; // Дескриптор файла

FindData: TWin32FindData; //Дополнительная информация.

end;

Таблица 9.2 Возможные значения атрибутов в поле Attr

Атрибут

Описание

faReadOnly

Файл только для чтения

faHidden

Скрытый файл

faSysFile

Системный файл

faVolumeID

Идентификатор диска

faDirectory

Каталог

faArchive

Архивный файл

faAnyFile

Любой файл

Функция FindNext имеет вид:

function FindNext(var F: TSearchRec): Integer;

Данная функция продолжает поиск, начатый функцией FindFirst. Если нашелся новый файл, функция FindNext возвращает 0, в противном случае – код ошибки Windows. Результаты поиска заносятся в запись TSearchRec.