2011-08-16 19 views
3

如何使用Windows shell API和C#更改映射驅動器的友好名稱?我的實際問題是,我正在處理沒有UNC路徑的退化網絡驅動器,因此重命名它的唯一方法是從資源管理器中,但我想以編程方式執行此操作。使用shell API重命名映射驅動器

+0

可能重複的[C#如何將CDROM的驅動器號從D:更改爲Z:](http://stackoverflow.com/questions/5084297/c-how-to-change-the-drive-letter -d-cdrom-from-d-to-z) –

+1

不重複;這是一個不同的問題。 OP想知道如何重命名映射驅動器的「友好名稱」,而不是更改驅動器號。 –

+0

[如何重命名或重新標記網絡驅動器標籤]的副本(http://stackoverflow.com/questions/4460390/how-to-rename-or-relabel-a-network-drive-label) – Luke

回答

0

您應該使用SetVolumeLabel API。

基本上,您所指的驅動器的「名稱」稱爲卷標。你可以P /調用API並改變它。

要獲得擴展的錯誤信息,您可以使用GetLastError

+0

沒有工作。設備doesen讓我改變它的卷標。 – apaka

+0

你能更具體嗎?我已經使用API​​,所以我知道它的工作原理。你有錯誤嗎? –

+0

按名稱我指的是瀏覽器顯示的名稱。卷名不是問題,它不能改變,它被硬編碼爲devicies驅動程序。我對renamin'Disconnected network drive'感興趣。 – apaka

0

System.IO.DriveInfo有一個屬性VolumeLabel,它允許您更改捲上的標籤。檢查VolumeLabel上的例外和備註以查看重命名卷的要求。

它看起來像你不能直接重命名UNC,除非你將它映射爲網絡驅動器。您也可以創建UNC的快捷方式,並重命名它。

3

我有一個類似的問題,使用下面的代碼解決了這個問題:

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

隨着對COM參考 - >微軟殼牌控制和自動化。 它基本上是一個古老的VBS代碼的C#表示我有

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

然而不同的是,由於某種原因,C#實現的命名空間返回folder object而所有VB實現似乎回到一個folder2 object。只有folder2具有'Self'屬性,所以需要額外的強制轉換。

另外,正如在其中一條評論中指出的那樣,這隻能在STA公寓內工作,所以Main()方法必須用[STAThread]裝飾。

我希望回答這樣的老問題不是壞習慣,但是我很沮喪地找不到解決方案。

+1

對老的,未回答的問題貢獻有價值的答案絕不是壞習慣。:) – Henrik

+1

請注意,這隻適用於STA公寓,所以要使用此功能,您必須用'[STAThread]'裝飾'Main()'方法' –

+0

這對設置新標籤非常有效。不幸的是,它似乎無法將網絡驅動器重置爲其原始標籤。至少不能使用null或空字符串。在Windows資源管理器中,可以通過將其重命名爲空字符串來重置它。任何想法如何使用此代碼做到這一點? – CodeX