Получение байтов на сектор с использованием WMI на C#, зная только букву разделаC#

Место общения программистов C#
Ответить
Anonymous
 Получение байтов на сектор с использованием WMI на C#, зная только букву раздела

Сообщение Anonymous »


Для моего приложения мне нужно определить лучший диск/раздел. Требования следующие:
[*]20 ГБ или более бесплатно [*]Диск должен быть зафиксирован (например, он не должен быть съемным USB-накопителем и т. д.) [*]Базовый диск должен иметь значение BytesPerSector 512 ИЛИ 4096.
Точки 1 и 2 можно легко проанализировать с помощью класса DriveInfo на C#. Однако я застрял на пункте 3...

Получение значения BytesPerSector из класса Win32_DiskDrive осуществляется с помощью ManagementObjectSearch. Однако я не могу проанализировать конкретный диск.

Например. Допустим, я хочу найти значение BytesPerSector C:\

// Указываем букву диска (изменяем на нужную букву) строкаdriveLetter = "C:"; // Получаем информацию о диске для указанной буквы диска DriveInfodriveInfo = новый (driveLetter); // Проверяем, готов ли диск (смонтирован) Assert.IsTrue(driveInfo.IsReady, $"Ожидали, что диск будет готов, но это не так"); Console.WriteLine("Формат: " + DriveInfo.Name); // Получаем диск, связанный с разделом вар diskDrive = новый System.Management.ManagementObjectSearcher( "SELECT * FROM Win32_DiskDrive WHERE DeviceID = '" +driveInfo.Name + "'" ).Get().OfType().FirstOrDefault(); // Проверяем, найден ли диск Assert.IsNotNull(diskDrive, $"Ожидался, что диск найден, но его значение равно нулю"); // Получаем информацию BytesPerSector uint bytesPerSector = Convert.ToUInt32(diskDrive["BytesPerSector"]); // Распечатываем информацию BytesPerSector Assert.IsTrue(bytesPerSector == 512 || bytesPerSector == 4096, $"Ожидали 512 или 4096, но было {bytesPerSector}"); Это не удается, за исключением:

Сообщение: Метод тестирования TestSectorInfo выдал исключение: System.Management.ManagementException: неверный запрос

Некоторые поиски привели меня к открытию, что DeviceID, ожидаемый Win32_DiskDrive, выглядит так:

\\.\PHYSICALDRIVE0 \\.\PHYSICALDRIVE1 и т. д.

Но я не могу знать наверняка, находится ли C:\ на DRIVE0 или DRIVE1, поэтому сначала мне нужно каким-то образом перевести букву раздела на соответствующий диск... Как мне вообще это сделать?

Я также пытался передать букву тома в запрос, но это не сработало, и искал классы C#, которые могли бы сделать то, что мне нужно, но безрезультатно.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»