Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО от Тихомирова / Уч пособие по КР СПО 2009 Ред 15-11-09.doc
Скачиваний:
27
Добавлен:
08.06.2015
Размер:
842.24 Кб
Скачать

1.3. Получение информации о файловой системе

1.3.1. Определение имеющихся логических дисков

Функция GetLogicalDrivers () : Dword возвращает 32-х битовое значение, каждый бит которого указывает, существует ли соответствующее логическое устройство. Бит 0 - диск А, бит 1 - диск B ….. бит 25 - диск Z.

1.3.2. Получение информации о томах

1. Функция GetVolumeInformation возвращает информацию, специфичную для файловой системы, связанной с каталогом, указанным первым параметром функции. Остальные параметры - указатели на буферы и переменные типа Dword.

GetVolumeInformation (

lpRootPathName : Pchar, // имя заданного каталога

lpVolumeNameBuffer : Pchar, // возвращаемое имя тома

nVolumeNameSize : Dword, // максимальный размер имени тома в символах. Должен быть задан при вызове функции

lpVolumeSerialNumber : pDword, // серийный номер тома - возвращаемое значение

lpMaximumComponentLenght : Dword, // максимальное количество символов, допустимое в именах файлов и каталогов

lpFileSystemFlags : Dword, // возвращаемая информация о возможностях //файловой системы

lpFileSystemNameBuffer : pChar, // указатель на буфер с названием файловой системы

nFileSystemNameSize : Dword ); // размер этого буфера в символах. Должен быть задан при вызове функции

Заметьте, что указатели на возвращаемые значения должны быть перед вызовом функции инициализированы (например, с помощью процедуры GetMem ).

Рекомендуется проверять возвращаемое функцией GetVolumeInformation значение. При возврате сообщения об ошибке следует проверить правильность задания входных параметров.

2. Функция GetDriveType возвращает информацию о типе указанного логического тома.

GetDriveType (lpRootPathName : PChar) // аргумент - имя заданного тома

3. Функция GetDiskFreeSpace возвращает статистику о дисковом пространстве на указанном логическом разделе.

GetDiskFreeSpace (

lpRootPathName : Pchar, // имя заданного логического раздела

SectorPerCluster : Dword,

BytesPerSector : Dword,

FreeClusters : Dword,

Clusters : Dword);

4. Функция GetDiskFreeSpaceEx возвращает статистику о дисковом пространстве на указанном логическом разделе большого размера.

GetDiskFreeSpaceEx (

lpRootPathName : Pchar, // имя заданного логического раздела

lpFreeBytesAvailableToCaller,

lpTotalNumberOfBytes, // общее число байт – объем раздела

lpTotalNumberOfFreeBytes : int64 // общее число свободных байтов раздела)

Пример 4 использования функций GetLogicalDrives и GetDriveType для получения списка имен разделов винчестера локального компьютера.

var

gg : DWORD;

i, m : integer;

Std : string;

begin

gg := GetLogicalDrives;

ListBox1.Clear;

m := 4;

Std := ‘ABCDEFGHIJKLMN’;

for I := 3 to 14 do

if (m and gg) <> 0 then

begin

if GetDriveType (Pchar (std[i]+’:\’)) =DRIVE_FIXED then

listbox1.Items.add (std[i]);

end;

m := 2 * m;

end;

1.3.3. Поиск файлов

Для организации поиска и отбора файлов применяются специальные процедуры, а также структура, в которой сохраняются результаты поиска - запись

type

TFileName = string;

TSearchRec = record

Time: Integer; { Время и дата создания}

Size: Integer {Размер файла }

Attr: Integer; {Параметры файла}

Name: TFileName; {Полное имя файла}

ExcludeAttr: Integer; {Не используется}

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

FindData: TWin32FindData; {Не используется}

end ;

обеспечивает хранение характеристик файла. Дата и время создания файла хранятся в формате MS-DOS.

Свойство Attr может содержать комбинацию следующих флагов-значений:

faReadOniy — только для чтения;

faHidden — скрытый;

faSysFile — системный;

faVolumeID — метка тома;

faDirectory — каталог;

faArchive — архивный;

faAnyFile — любой.

Для определения параметров файла служит оператор and:

if (SearchRec.Attr AND faReadOnly) > 0 then ShowMessage ('Файл только для чтения');

Непосредственно для поиска файлов используются функции FindFirst и FindNext. Функция function FindFirst (const Path: string; Attr: Integer; var F: TSearchRec): Integer; находит первый файл, заданный полным маршрутом Path и параметрами Attr. Если заданный файл найден, функция возвращает 0, иначе — код ошибки Windows. Параметры найденного файла возвращаются в записи F типа TSearchRec.

Функция function FindNext(var F: TSearchRec): Integer;

служит для повторного поиска следующего файла, удовлетворяющего критерию поиска. При этом учитываются те параметры поиска, которые заданы последним вызовом функции FindFirst. В случае удачного поиска возвращается 0.

Для освобождения ресурсов, выделенных для выполнения поиска, применяется функция:

procedure FindClose(var F: TSearchRec);

В качестве примера организации поиска файлов рассмотрим фрагмент кода для вывода списка имен файлов (и подкаталогов), хранящихся в заданном каталоге и его подкаталогах.

procedure FilesSearch (path, name: string);

var

sr : TSearchRec;

begin

// Ищем все файлы, соответствующие маске в заданном каталоге

if FindFirst(path + '\*.' + name + '*', faAnyFile, sr) = 0 then

begin

repeat

if sr.Name[1] <>'.' then Form1.ListBox1.Items.Add (sr.Name);

until FindNext(sr) <> 0;

FindClose(sr);

end;

// Ищем все директории в текущем каталоге

if FindFirst (path + '\*', faDirectory, sr) = 0 then

begin

repeat

if sr.Name[1] <> '.' then FilesSearch (path + '\' + sr.Name, name);

until FindNext(sr) <> 0;

FindClose(sr);

end;