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, то это приводит к связыванию объекта файлового отображения со страничным файлом операционной системы.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Август
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс