repeat
r : = WaitForSingleObject(fn,2000) ; if Г = WAIT_OBJECT_0 then
Forml.UpdateList;
if not FindNextChangeNotification(fn) then break;
until Terminated;
FindcioseChangeNotification(fn);
end;
На главной форме должны находиться компоненты, нужные для выбора обследуемой папки, а также компонент TListBox, в который будут записываться имена файлов:
procedure TForml.ButtonlClick(Sender: TObject);
var dir : string;
begin
if SelectDirectory(dir,[],0) then begin Editl.Text :=dir;
DiodXIame := dir;
end;
end;
procedure TForml .UpdateList;
var SearchRec: TSearchRec;
begin
ListBoxl.Clear;
FindFirst(Editl.Text+'\*.*', faAnyFile, SearchRec); repeat
ListBoxl.Items.Add(SearchRec.Name);
until FindNext(SearchRec) <>
0;
FindClose(SearchRec);
end;
Приложение готово. Чтобы оно стало полнофункциональным, предусмотрите в нем механизм перезапуска потока при изменении обследуемой папки.
Использование отображаемых файлов
Последний - самый нетрадиционный вид работы с файлами - это так называемые отображаемые файлы.
Вообще говоря, в 32-разрядной Windows под "памятью" подразумевается не только оперативная память (ОЗУ), но также и память, резервируемая операционной системой на жестком диске. Этот вид памяти называется виртуальной памятью. Код и данные отображаются на жесткий диск посредством страничной системы (paging system) подкачки. Страничная система использует для отображения страничный файл (win386.swp в Windows 95/98 и pagefile.sys в Windows NT). Необходимый фрагмент виртуальной памяти переносится из страничного файла в ОЗУ и, таким образом, становится доступным.
А что, если так же поступить и с любым другим файлом и сделать его частью адресного пространства? В Win32 это возможно. Для выделения фрагмента памяти должен быть создан специальный системный объект Win32, называемый отображаемым файлом. Этот объект "знает", как соотнести файл, находящийся на жестком диске, с памятью, адресуемой процессами.
Одно или более приложений могут открыть отображаемый файл и получить тем самым доступ к данным этого объекта. Таким образом, данные, помещенные в страничный файл приложением, использующим отображаемый файл, могут быть доступны другим приложениям, если они открыли и используют тот же самый отображаемый файл.
Создание и использование объектов файлового отображения осуществляется посредством функций Windows API. Этих функций три:
CreateFileMapping
MapViewOfFile
UnMapViewOfFile
Отображаемый файл создается операционной системой при вызове функции CreateFileMapping. Этот объект поддерживает соответствие между содержимым файла и адресным пространством процесса, использующего этот файл. Функция CreateFileMapping имеет шесть параметров:
function CreateFileMapping (hFile: THandle;
lpFileMappingAttributes: PSecurityAttributes;
flProtect, dwMaximumSizeHigh, dwMaxirrvumSizeLow-. EWDRD;
lpName: PChar): THandle;
Первый параметр имеет тип THandle. Он должен соответствовать дескриптору уже открытого при помощи функции createFile файла. Если значение параметра hFile равно sffffffff, то это приводит к связыванию объекта файлового отображения со страничным файлом операционной системы.