Как получить букву диска из полного имени диска

Как можно получить букву диска (например, F: \) из известного полного имени (если оно присутствует) диска (например, WORKMEMORYSTICK) с помощью C # под Windows?

Для начала было бы даже наоборот.


person James    schedule 28.08.2011    source источник


Ответы (2)


Класс DriveInfo предоставляет метод для получения всех доступных дисков (GetDrives) вы можете перечислить эти соответствовать вашей данной строке. Что-то вроде следующего должно помочь вам в этом:

DirectoryInfo root;
var drives = DriveInfo.GetDrives();
foreach (var drive in drives)
{
    if (drive.VolumeLabel == label)
    {
        root = drive.RootDirectory;
        break;
    }
}

Как упоминал Абатищев, и изначально не уточнялся из-за требований моих детей ко времени, существует потенциальная проблема в том, что вы собираетесь сопоставить только первый диск с этой меткой, поэтому вы необходимо будет учесть это в вашей логике, если это требуется вашей системе (хотя определение того, какой из двух дисков является желаемым диском, основываясь только на неуникальной строке, не лучше, чем предположение, или как я упоминаю ниже, спрашивая пользователя (если это ввод), что они имели в виду.)

person Grant Thomas    schedule 28.08.2011
comment
Это не то, что делает GetPathRoot(). OP говорит о поиске буквы диска, соответствующей метке тома. - person cdhowie; 28.08.2011
comment
@cdhowie: Только что понял ... свою ошибку. - person Grant Thomas; 28.08.2011
comment
Но что, если одна и та же метка имеет несколько дисков? - person abatishchev; 28.08.2011

Вы можете циклически просмотреть все диски и проверить свойства Name и VolumeLabel объекта DriveInfo .

См. Этот вопрос для примеров кода (используется для получения буквы USB-накопителя, но вы можете легко его адаптировать):

Как найти букву USB-накопителя?

Извините, я не могу предоставить вам код, но сейчас я использую Mac :)

person mamoo    schedule 28.08.2011
comment
Но что, если одна и та же метка имеет несколько дисков? - person abatishchev; 28.08.2011