Как изменить понятное имя подключенного диска с помощью API оболочки Windows и C#? Моя реальная проблема заключается в том, что я имею дело с отключенным сетевым диском без пути UNC, поэтому единственный способ переименовать его - из проводника, но я хочу сделать это программно.
Переименуйте подключенный диск с помощью API оболочки
Ответы (3)
У меня была аналогичная проблема, и я решил ее, используя следующий код:
Shell32.Shell shell = new Shell32.Shell();
((Shell32.Folder2)shell.NameSpace("X:")).Self.Name = "Friendly Label";
Со ссылкой на COM --> Microsoft Shell Controls and Automation. Это в основном представление С# старого кода VBS, которое у меня было.
Set oShell = CreateObject("Shell.Application")
oShell.NameSpace("X:").Self.Name = "Friendly Label"
Однако разница в том, что реализация NameSpace на C# по какой-то причине возвращает объект папки, в то время как все реализации VB возвращают объект папки2. Только папка2 имеет свойство «Я», поэтому требуется дополнительное приведение.
Кроме того, как было указано в одном из комментариев, это работает только в STA-квартире, поэтому метод Main() должен быть украшен [STAThread].
Я надеюсь, что отвечать на такие старые вопросы не является плохой практикой, но я был очень расстроен тем, что нигде не нашел решения для этого.
Main()
с помощью [STAThread]
- person Matthew Watson; 28.08.2015
InvalidCastException
с C#, есть идеи, почему я не могу преобразовать его в Shell32.Folder2
?
- person Matt; 08.01.2019
Вам следует использовать API SetVolumeLabel
.
По сути, «имя» диска, на которое вы ссылаетесь, называется меткой тома. Вы можете P/Invoke API и изменить его таким образом.
Чтобы получить расширенную информацию об ошибке, вы можете использовать GetLastError
.
System.IO.DriveInfo имеет свойство VolumeLabel, который позволяет изменить метку томов. Ознакомьтесь с исключениями и примечаниями к VolumeLabel, чтобы увидеть требования к переименованию тома.
Похоже, вы не можете напрямую переименовать UNC, если не сопоставите его как сетевой диск. Вы также можете создать ярлык для UNC и переименовать его.