Переименуйте подключенный диск с помощью API оболочки - PullRequest
3 голосов
/ 16 августа 2011

Как я могу изменить понятное имя подключенного диска, используя API оболочки Windows и C #?Моя настоящая проблема заключается в том, что я имею дело с отключенным сетевым диском без UNC-пути, поэтому единственный способ переименовать его - из Проводника, но я хочу сделать это программно.

Ответы [ 3 ]

3 голосов
/ 11 декабря 2014

У меня была похожая проблема, и я решил ее, используя следующий код:

Shell32.Shell shell = new Shell32.Shell();
((Shell32.Folder2)shell.NameSpace("X:")).Self.Name = "Friendly Label";

Со ссылкой на COM -> Microsoft Shell Controls and Automation.Это в основном C # представление старого кода VBS, которое у меня было

Set oShell = CreateObject("Shell.Application")
oShell.NameSpace("X:").Self.Name = "Friendly Label"

Разница, однако, в том, что реализация NameSpace на C # по какой-то причине возвращает объект папки , тогда как все реализации VB кажутсявернуть объект folder2 .Только папка 2 обладает свойством «Self», поэтому требуется дополнительное приведение.

Кроме того, как было указано в одном из комментариев, это работает только в квартире STA, поэтому метод Main () имеетбыть украшенным [STAThread].

Я надеюсь, что отвечать на такие старые вопросы неплохо, но я был очень расстроен, что нигде не нашел решения.

0 голосов
/ 16 августа 2011

System.IO.DriveInfo имеет свойство VolumeLabel , которое позволяет изменять метку на ваших томах.Проверьте исключения и замечания на VolumeLabel, чтобы увидеть требования для переименования тома.

Похоже, что вы не можете напрямую переименовать UNC, если не подключите его как сетевой диск.Вы также можете создать ярлык для UNC и переименовать его.

0 голосов
/ 16 августа 2011

Вы должны использовать SetVolumeLabel API.

По сути, «имя» накопителя, на которое вы ссылаетесь, называется меткой тома.Вы можете P / Invoke API и изменить его таким образом.

Чтобы получить расширенную информацию об ошибках, вы можете использовать GetLastError.

...