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

5

Цель

Научиться использовать в своих приложениях системные функции Win32 API. Научиться осуществлять поиск файлов и каталогов стандартными средствами поиска Win32 API.

Задание

Реализовать графическое приложение, показывающее в виде дерева структуру каталогов всех дисков, имеющихся в системе, аналогично Проводнику Windows.

Описание

Вначале необходимо определить список логических дисков, имеющихся в системе. Эта информация удобно отображается с помощью функции GetLogicalDriveStrings. Затем необходимо определить структуру каталогов по следующему алгоритму:

  1. С помощью функций FindFirstFile, FindNextFile по шаблону «*» получаем все файлы и подкаталоги текущего каталога.

  2. Отбираем из полученных файлов подкаталоги, проверяя их атрибуты. (Проверка атрибутов файлов осуществляется путем логического умножения атрибутов: fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY).

  3. Добавляем полученные подкаталоги в дерево каталогов приложения в качестве потомков вершины, соответствующей текущему каталогу.

  4. Завершаем поиск в данном каталоге функцией FindClose.

Для поддержания адекватности отображаемых данных добавление подкаталогов в дерево осуществляется только после развёртывания какой-либо его вершины. При развёртывании определяется наличие хоты бы одного подкаталога у найденного элемента для проставления «плюсов».

Описания функций и структур

GetLogicalDriveStrings

Функция GetLogicalDriveStrings заполняет буфер строками, содержащими имена всех дисков в системе.

DWORD GetLogicalDriveStrings(

DWORD nBufferLength, // размер буфера

LPTSTR lpBuffer // буфер для получения имен дисков

);

Параметры

nBufferLength

[in] Задает максимальный размер в символах буфера, на который указывает lpBuffer. Этот размер не включает в себя символ завершающего нуля.

lpBuffer

[out] Указатель на буфер для получения последовательности null-terminated-строк (по одной для каждого действующего диска в системе). Данная последовательность завершается пустой строкой. Следующий пример показывает возможное содержимое буфера:

a:\<null>c:\<null>d:\<null><null>

Возвращаемые значения

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

Если размер буфера недостаточен, возвращаемое значение будет больше nBufferLength. Это размер буфера, необходимого для хранения строк с именами дисков.

Если функция выполнилась неудачно, то возвращается нулевое значение. Для получения более подробной информации об ошибке используйте GetLastError.

GetDriveType

Функция GetDriveType определяет является ли диск съёмным, несъёмным, CD-ROM-ом, RAM-диском или сетевым.

UINT GetDriveType(

LPCTSTR lpRootPathName // корневой каталог

);

Параметры

lpRootPathName

[in] Указатель на строку, ограниченную нулём, которая задаёт корневой каталог диска, информацию о котором нужно вернуть. Требуется обратный слеш. Если lpRootPathName равен NULL, то функция использует корень текущего каталога.

Возвращаемые значения

Возвращаемое значение определяет тип диска. Оно может быть равно одному из следующих констант:

Тип

Значение

DRIVE_UNKNOWN

Тип диска не может быть определён.

DRIVE_NO_ROOT_DIR

Корневой путь неверен.

DRIVE_REMOVABLE

Диск является съёмным.

DRIVE_FIXED

Диск является несъёмным.

DRIVE_REMOTE

Диск является удалённым (сетеывм).

DRIVE_CDROM

Диск является устройством CD-ROM.

DRIVE_RAMDISK

Устройство является RAM-диском.

FindFirstFile

Функция FindFirstFile ищет в каталоге файл, имя которого совпадает с заданным именем файла. FindFirstFile проверяет как имена файлов, так и имена подкаталогов.

Чтобы задать дополнительные атрибуты (свойства), применяемые при поиске, используйте функцию FindFirstFileEx.

HANDLE FindFirstFile(

LPCTSTR lpFileName, // имя файла

LPWIN32_FIND_DATA lpFindFileData // буфер для данных

);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]