Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

  • Главная
  • FAQ
  • Как получить список дисков и их параметры?

Как получить список дисков и их параметры?

CuBook05

Приведенный ниже код проверяет все существующие в компьютеры диски на выводит по ним информацию, о том какой тип диска, размер его и прочее.
int n;
bool Flag;
DWORD dr = GetLogicalDrives(); // функция возвращает битовую маску

for(int x=0;x<26;x++) // прогоняем по битам
{
n = ((dr>>x)&1); // определяем значение текущего бита
if(n) // если единица - диск с номером x есть
{
AnsiString dl = AnsiString((char)(65+x)); // получаем литеру диска
AnsiString path = AnsiString((char)(65+x))+":\\";
AnsiString out = "Диск " + dl + "\n";

// определяем готово ли устройство
WORD OldErrorMode;
OldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); // убираем показ ошибок
bool ready = DirectoryExists(path); // пытаемcя открыть корневую директорию
SetErrorMode(OldErrorMode); // восстанавливаем старый режим показа ошибок

if (ready)
{
UINT drive_type = GetDriveType((dl+":\\").c_str()); // определяем тип диска
out += "\nТип диска: ";
if (drive_type == DRIVE_REMOVABLE) out += "REMOVABLE";
else if (drive_type == DRIVE_FIXED) out += "FIXED";
else if (drive_type == DRIVE_REMOTE) out += "REMOTE";
else if (drive_type == DRIVE_CDROM) out += "CD-ROM";
else if (drive_type == DRIVE_RAMDISK) out += "RAMDISK";
else out += "НЕИЗВЕСТНЫЙ_ТИП\n";

// если это HDD - заприашиваем информацию
if (drive_type == DRIVE_FIXED)
{
unsigned __int64 FreeBytesAvailable;
unsigned __int64 TotalNumberOfBytes;
unsigned __int64 TotalNumberOfFreeBytes;
char drive_label[30];
char drive_fat[30];
DWORD drive_sn;
DWORD drive_name_size = sizeof(drive_label);

// получаем данные о размерах
Flag = ::GetDiskFreeSpaceEx(path.c_str(),
(PULARGE_INTEGER)&FreeBytesAvailable,
(PULARGE_INTEGER)&TotalNumberOfBytes,
(PULARGE_INTEGER)&TotalNumberOfFreeBytes
);

if (Flag)
{
out += "\nСвободно на диске: " + AnsiString(TotalNumberOfFreeBytes) + "\n";
out += "Всего на диске: " + AnsiString(TotalNumberOfBytes) + "\n";
}
else
{
out += "Ошибка в GetDiskFreeSpaceEx\n";
}

// получаем метку, серийный номер и пр.
Flag = GetVolumeInformation(path.c_str(),
drive_label,
sizeof(drive_label),
&drive_sn,
&drive_name_size,
NULL,
drive_fat,
sizeof(drive_fat)
);

if (Flag)
{
out += "\nМетка тома: " + AnsiString(drive_label) + "\n";
out += "Сер.номер: " + AnsiString(drive_sn) + "\n";
out += "Файловая система: " + AnsiString(drive_fat) + "\n";
}
else
{
out += "Ошибка в GetVolumeInformation\n";
}
}
}
else
{
out += "НЕ ГОТОВ";
}
ShowMessage(out); //выводим в сплывающем сообщение информацию по каждому найденному диск
}
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий