- •Фгбо увпо «Воронежский государственный технический университет»
- •Программная реализация функций управления файловой системой эвм
- •Программная реализация функций управления файловой системой эвм
- •1.2. Содержание работы
- •1.3. Используемое оборудование и программные средства
- •2.1. Краткие теоретические сведения
- •Функции Win32 api получения информации о файлах и дисках
- •Функции получения информации о диске:
- •Функции получения информации о файлах и каталогах:
- •Распознавание типа диска
- •Информация о файловой системе
- •Получение текущей директории
- •Получение пути к файлу
- •Получение атрибутов файла
- •Получение размера файла
- •Поиск файла по маске
- •Управляющие функции файловой системы
- •Удаление файла
- •Копирование файла
- •Перенос/переименование файла
- •Чтение из файла
- •Запись в файл
- •Вспомогательные функции. Связь всех видов функций
- •3.1. Порядок выполнения лабораторной работы
- •3.2. Указания по оформлению отчета
- •Программная реализация функций управления файловой системой эвм
Функции Win32 api получения информации о файлах и дисках
Все функции Win32 API, используемые в файловой системе, условно можно разделить на функции получения информации (информационные) и управляющие функции. Информационные функции имеют важное значение особенно в тех случаях, когда параметры алгоритма, выполняемого программой, зависимы от конфигурации системы. Список наиболее популярных и часто применяемых в файловой системе информационных функций представлен ниже.
Функции получения информации о диске:
GetLogicalDrives;
GetLogicalDriveStrings;
GetDriveType;
GetVolumeInformation;
GetDiskFreeSpace.
Функция GetLogicalDrives не имеет входных параметров и возвращает 32-битовое число, каждый бит которого, установленный в единицу, свидетельствует о наличии в системе соответствующего диска (0-й бит - диск А, 1-й бит - диск B и т.д.).
Синтаксис: DWORD GetLogicalDrives(void)
Функция GetLogicalDriveStrings в отличие от GetLogicalDrives позволяет получить массив символьных строк, представляющих собой имена дисков. Каждая строка заканчивается символом <null> так же, как и весь массив строк. Например: "a:\\<null>", "c:\\<null>", "d:\\<null>"<null>. Функция возвращает размер буфера, необходимый для хранения строк с именами дисков.
Синтаксис: DWORD GetLogicalDriveStrings(dwBuffer, lpBuffer)
DWORD dwBuffer; // размер буфера для текстовой строки
LPTSTR lpBuffer; // указатель на буфер
Функция GetDriveType предназначена для определения типа диска. Возвращается одно из следующих значений типа unsigned int:
0 - Диск не может быть определен.
1 - Корневая директория не существует.
DRIVE_REMOVABLE - Гибкий диск.
DRIVE_FIXED - Жесткий диск.
DRIVE_REMOTE - Удаленный (сетевой) диск.
DRIVE_CDROM - Компакт-диск (CD-ROM).
DRIVE_RAMDISK - - Виртуальный диск.
Синтаксис: UINT GetDriveType(lpDiskName)
LPCTSTR lpDiskName; // указатель на имя диска
GetVolumeInformation позволяет получить информацию о файловой системе выбранного диска и возвращает значение true при корректном завершении функции. Функции должны быть переданы указатели на переменные, для которых заранее выделена память и размеры буферов для получаемой информации. Пользователю необходимо определить имя диска и размеры буферов для метки диска и для названия системы, остальные переменные являются выходными.
Синтаксис: BOOL GetVolumeInformation(lpDiskName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize)
LPCTSTR lpDiskName;// указатель на имя диска
LPTSTR lpVolumeNameBuffer;// указатель на метку диска
DWORD nVolumeNameSize;// размер буфера для метки диска
LPDWORD lpVolumeSerialNumber;// указатель на серийный номер диска
LPDWORD lpMaximumComponentLength;//указатель на максимальную длину имени файла(вместе с путем)
LPDWORD lpFileSystemFlags;// указатель на флаги системы
LPTSTR lpFileSystemNameBuffer;// указатель на название системы
DWORD nFileSystemNameSize;//размер буфера для названия системы
GetDiskFreeSpace предназначена для получения информации об объеме диска и количестве хранимой информации. Необходимо задать лишь имя диска и при успешном исполнении функция выдает значение true.
Cинтаксис: BOOL GetDiskFreeSpace(lpDiskName, lpSectorsPerCluster, lpBytesPerSector, lpFreeClusters, lpClusters)
LPCTSTR lpDiskName;// указатель на имя диска
LPDWORD lpSectorsPerCluster;// указатель на количество секторов в кластере
LPDWORD lpBytesPerSector;// указатель на количество байт в секторе
LPDWORD lpFreeClusters;// указатель на количество свободных кластеров
LPDWORD lpClusters;// указатель на количество кластеров