Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод указ лаб раб по сист ПО.doc
Скачиваний:
3
Добавлен:
24.04.2019
Размер:
124.93 Кб
Скачать

Файловая система и файловый ввод-вывод

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

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

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

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

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

GetVolumeInformation (

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

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

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

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

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

// в именах файлов и каталогов

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

// системы

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

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

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

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

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

GetDiskFreeSpace (

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

SectorPerCluster : Dword,

BytesPerSector : Dword,

FreeClusters : Dword,

Clusters : Dword );

Пример использования функции GetDiskFreeSpace

if(GetDiskFreeSpace(Disk, &SectorsPerCluster, &BytesPerSector, &NumFreeClusters, &TotalClusters))

{

Str="Число секторов в кластере: ( ";

Str+=ltoa(SectorsPerCluster, ch, 10);

Str+=" )";

m_CListSpase.AddString(Str);

Str="Количество байтов в секторе: ( ";

Str+=ltoa(BytesPerSector, ch, 10);

Str+=" )";

m_CListSpase.AddString(Str);

Str="Количество свободных кластеров на диске: ( ";

Str+=ltoa(NumFreeClusters, ch, 10);

Str+=" )";

m_CListSpase.AddString(Str);

Str="Количество кластеров на диске: ( ";

Str+=ltoa(TotalClusters, ch, 10);

Str+=" )";

m_CListSpase.AddString(Str);

Str="Количество мегабайт на диске: ( ";

TotalByte1=BytesPerSector*SectorsPerCluster;

TotalByte2=TotalClusters/1024;

TotalByte3=(TotalByte1*TotalByte2)/1024;

Str+=ltoa(TotalByte3, ch, 10);

Str+=" Mb )";

m_CListSpase.AddString(Str);

Str="Количество свободных мегабайт на диске: ( ";

TotalByte1=BytesPerSector*SectorsPerCluster;

TotalByte2=NumFreeClusters/1024;

TotalByte3=(TotalByte1*TotalByte2)/1024;

Str+=ltoa(TotalByte3, ch, 10);

Str+=" Mb )";

m_CListSpase.AddString(Str);

}

else m_CListSpase.AddString(_T(" Нет носителя в устройстве."));

}