Список всех разделов диска на C #

Я писал код для перечисления всех разделов диска и обнаружил проблему. Свойство Win32_DiskDrive Partitions WMI показывает мне, что на одном тестовом диске 5 разделов, но я могу перечислить только четыре из них (последние два раздела отображаются, поскольку они были только одним). Последние два раздела являются основными, но один - это раздел подкачки, а другой - раздел Linux.


person Gabi Cea    schedule 18.06.2013    source источник
comment
Можем ли мы увидеть код, который вы пробовали?   -  person gunr2171    schedule 18.06.2013
comment
@KenWhite, я бы согласился, только если OP действительно хочет использовать подход WMI, а не ответ Тима.   -  person gunr2171    schedule 18.06.2013
comment
Я пробовал этот код codevar searchcher = new ManagementObjectSearcher (SELECT * FROM Win32_DiskPartition); ‹br/› foreach (var queryObj в searchcher.Get ()) ‹br/› {‹br/› Console.WriteLine (---- -------------------------------); ‹br/› Console.WriteLine (экземпляр Win32_DiskPartition); ‹br/› Консоль .WriteLine (Имя: {0}, (строка) queryObj [Имя]); ‹br/› Console.WriteLine (Индекс: {0}, (uint) queryObj [Индекс]); ‹br/› Console.WriteLine (DeviceID : {0}, (строка) queryObj [DeviceID]); ‹br/›} `   -  person Gabi Cea    schedule 18.06.2013
comment
@ gunr2171: вопрос касается перечисления всех разделов диска в C #, что также задает вопрос, который я связал. Ни один из них не говорит «Без WMI», и в этом вопросе действительно упоминается использование WMI. В этом вопросе тоже нигде не говорится об использовании ответа Тима. :-)   -  person Ken White    schedule 18.06.2013


Ответы (2)


Я думаю, это должно помочь:

    /// <summary>
    /// Loads all Drives of the Computer and returns a List.
    /// </summary>
    private List<DriveInfo> LoadDrives()
    {
        var drives = new List<DriveInfo>();
        foreach (DriveInfo drive in DriveInfo.GetDrives())
        {
            if (drive.IsReady)
            {
                drives.Add(drive);
            }
        }
        return drives;
    }
person Eru Iluvatar    schedule 18.06.2013
comment
Если вы действительно этого хотите, вы можете заменить свой drives.Add на yield return и вернуть IEnumerable. Просто как предложение. - person gunr2171; 18.06.2013
comment
Я пробовал, но этот код возвращает только 3 диска, а управление дисками Windows показывает 5 ... - person Gabi Cea; 18.06.2013
comment
Да, это правда и, может быть, более элегантно :) - person Eru Iluvatar; 18.06.2013
comment
Думаю, причина может быть условной! Вы можете отладить функцию и увидеть, почему возвращаются только три диска! - person Eru Iluvatar; 18.06.2013
comment
DriveInfo.GetDrives () возвращает только те диски, которые Windows показывает в окне «Мой компьютер» - person Gabi Cea; 18.06.2013
comment
Может быть, для двух других дисков установлены какие-то атрибуты? Мои окна показывает мой еще один диск на разделах - окно. Итак, может быть, два диска не имеют буквенного обозначения? - person Eru Iluvatar; 18.06.2013
comment
Да, у этих двух дисков нет буквы диска, потому что они являются разделами Linux и Swap, и Windows не может их видеть. - person Gabi Cea; 18.06.2013
comment
Вы также можете попробовать это решение, похоже, оно может решить вашу проблему, но я его не тестировал! stackoverflow.com/questions / 6575727 / - person Eru Iluvatar; 19.06.2013
comment
Я уже знал эту ссылку, и я попробовал это решение, но оно показывает мне только 4 раздела, последний показанный раздел имеет тот же размер, что и последние два реальных раздела ... - person Gabi Cea; 19.06.2013

Я считаю, что вам нужно _ 1_.

Для каждого string, используемого вами GetLogicalDrives, вы можете создать System.IO.DriveInfo , который предоставит всевозможную информацию о логическом диске.

DriveInfo.GetDrives() может быть ярлыком для двух шагов. приведено выше. Я не совсем уверен в этом, да и документация не очень ясна.

person Timothy Shields    schedule 18.06.2013
comment
Попробую с string[] System.IO.Directory.GetLogicalDrives() и подскажу свой опыт - person Gabi Cea; 18.06.2013
comment
Этот код возвращает то же самое, только 3 диска, те же диски, которые Windows показывает в окне «Мой компьютер» ... - person Gabi Cea; 18.06.2013