- •Фгбо увпо «Воронежский государственный технический университет»
- •Программная реализация функций управления файловой системой эвм
- •Программная реализация функций управления файловой системой эвм
- •1.2. Содержание работы
- •1.3. Используемое оборудование и программные средства
- •2.1. Краткие теоретические сведения
- •Функции Win32 api получения информации о файлах и дисках
- •Функции получения информации о диске:
- •Функции получения информации о файлах и каталогах:
- •Распознавание типа диска
- •Информация о файловой системе
- •Получение текущей директории
- •Получение пути к файлу
- •Получение атрибутов файла
- •Получение размера файла
- •Поиск файла по маске
- •Управляющие функции файловой системы
- •Удаление файла
- •Копирование файла
- •Перенос/переименование файла
- •Чтение из файла
- •Запись в файл
- •Вспомогательные функции. Связь всех видов функций
- •3.1. Порядок выполнения лабораторной работы
- •3.2. Указания по оформлению отчета
- •Программная реализация функций управления файловой системой эвм
Распознавание типа диска
Тип диска выводится с помощью компоненты Label.
TLabel *Label1;
void main ()
{
char lpDiskName[]="C:\\";
drvtype=GetDriveType(lpDiskName);
switch (drvtype)
{
case 0: Label1->Caption="диск не может быть определен";break;
case 1: Label1->Caption="корневой директорий несуществует";break;
case DRIVE_REMOVABLE : Label1->Caption="гибкий диск";break;
case DRIVE_FIXED : Label1->Caption="жесткий диск";break;
case DRIVE_REMOTE : Label1->Caption="удаленный диск";break;
case DRIVE_CDROM : Label1->Caption="компакт диск";break;
case DRIVE_RAMDISK : Label1->Caption="виртуальный диск";break;
}
}
Информация о файловой системе
Компоненты Label1 - Label6 отображают значения флагов системы, Edit1 - метка тома, Edit2 - серийный номер, Edit3 - максимальная длина имени файла, Edit4 - имя файловой системы (FAT, CDFS,NTFS,HPFS).
TEdit *Edit1; TEdit *Edit2; TEdit *Edit3; TEdit *Edit4; TLabel *Label1; TLabel *Label2; TLabel *Label3; TLabel *Label4; TLabel *Label5; TLabel *Label6; char lpVolumeNameBuffer[20]; DWORD nVolumeNameSize; DWORD far lpVolumeSerialNumber; DWORD far lpMaximumComponentLength; DWORD far lpFileSystemFlags; char lpFileSystemNameBuffer[20]; DWORD nFileSystemNameSize; void main () { char chper[25]; char lpDiskName[]="C:\\"; nVolumeNameSize=20; nFileSystemNameSize=20; if (GetVolumeInformation(lpDiskName,lpVolumeNameBuffer, nVolumeNameSize,&lpVolumeSerialNumber,&lpMaximumComponentLength, &lpFileSystemFlags,lpFileSystemNameBuffer,nFileSystemNameSize)) { Edit1->Text=lpVolumeNameBuffer; Edit2->Text=(AnsiString)CharUpper(ultoa(lpVolumeSerialNumber,chper,16))+"h"; Edit3->Text=(int)lpMaximumComponentLength; Edit4->Text=lpFileSystemNameBuffer; if (lpFileSystemFlags&FS_CASE_IS_PRESERVED)Label1->Caption="FS_CASE_IS_PRESERVED"; if (lpFileSystemFlags&FS_CASE_SENSITIVE) Label2->Caption="FS_CASE_SENSITIVE"; if (lpFileSystemFlags&FS_UNICODE_STORED_ON_DISK) Label3->Caption="FS_UNICODE_STORED_ON_DISK"; if (lpFileSystemFlags&FS_PERSISTENT_ACLS) Label4->Caption="FS_PERSISTENT_ACLS"; if (lpFileSystemFlags&FS_FILE_COMPRESSION) Label5->Caption="FS_FILE_COMPRESSION"; if (lpFileSystemFlags&FS_VOL_IS_COMPRESSED)Label6->Caption="FS_VOL_IS_COMPRESSED"; } }
Информация об объеме диска
Компоненты отображают: Edit1 - общее количество кластеров, Edit2 - количество свободных кластеров, Edit3 - количество занятых кластеров, Edit4 - количество секторов в кластере, Edit5 - количество байт в секторе. Edit6 - Edit8 общее, свободное и занятое дисковое пространство в байтах.
TEdit *Edit1; TEdit *Edit2; TEdit *Edit3; TEdit *Edit4; TEdit *Edit5; TEdit *Edit6; TEdit *Edit7; TEdit *Edit8; DWORD far lpSectorsPerCluster; DWORD far lpBytesPerSector; DWORD far lpFreeClusters; DWORD far lpClusters; void main () { char chper[25]; char lpDiskName[]="C:\\"; DWORD diskspace;// емкость диска в байтах DWORD freediskspace;// свободная емкость диска в байтах if (GetDiskFreeSpace(lpDiskName,&lpSectorsPerCluster,&lpBytesPerSector, &lpFreeClusters,&lpClusters)) { diskspace=lpClusters*lpSectorsPerCluster*lpBytesPerSector; freediskspace=lpFreeClusters*lpSectorsPerCluster*lpBytesPerSector; Edit1->Text=ultoa(lpClusters,chper,10); Edit2->Text=ultoa(lpFreeClusters,chper,10); Edit3->Text=ultoa(lpClusters-lpFreeClusters,chper,10);// занятые кластеры Edit4->Text=ultoa(lpSectorsPerCluster,chper,10); Edit5->Text=ultoa(lpBytesPerSector,chper,10); Edit6->Text=ultoa(diskspace,chper,10); Edit7->Text=ultoa(freediskspace,chper,10); Edit8->Text=ultoa(disksize-freediskspace,chper,10);// занятая емкость диска в байтах - } }
Именно эти функции подразумевают, когда говорят о проверке конфигурации файловой и дисковой системы. Файловые информационные функции - это те функции, которые получают более частную информацию о конкретных файлах и каталогах (директориях). К такой информации можно отнести следующие ее основные виды:
текущая директория;
полный путь к файлу и имя файла;
атрибуты файла;
размер файла;
наличие либо отсутствие искомого файла.