2011-08-16 16 views
3

WindowsシェルAPIとC#を使用して、マップされたドライブのフレンドリ名を変更するにはどうすればよいですか?私の実際の問題は、UNCパスのない分離されたネットワークドライブを扱っていることです。その名前を変更する唯一の方法はエクスプローラからですが、プログラムでそれをやりたいのです。シェルAPIでマップされたドライブの名前を変更

+0

[C#CD-ROMのドライブ文字をD:からZ:に変更する方法(http://stackoverflow.com/questions/5084297/c-how-to-change-the-drive-letter) cd-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/Invoke APIを使用して、そのように変更することができます。

拡張エラー情報を取得するには、GetLastErrorを使用します。

+0

その功績があります。デバイスはボリュームラベルを変更することができません。 – apaka

+0

もっと具体的になりますか?私はAPIを使用していますので、動作していることが分かります。エラーが発生していますか? –

+0

名前で私はエクスプローラが表示する名前を参照していました。ボリューム名は問題ではなく、変更することはできません。devnameドライバにハードコードされています。私は別のものに「Disconnected network drive」を改名することに興味があります。 – apaka

0

System.IO.DriveInfoにはボリュームのラベルを変更できるプロパティVolumeLabelがあります。ボリュームの名前を変更するための要件を確認するには、VolumeLabelの例外と注釈を確認してください。

ネットワークドライブとしてマップしない限り、UNCの名前を完全に変更できないようです。また、UNCへのショートカットを作成して名前を変更することもできます。

3

私は同様の問題を抱えていたし、次のコード使用してそれを解く:COMを参照して

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

を - >マイクロソフトシェルコントロールとオートメーション。 それは基本的に古いVBSコードのC#の表現が、私は違いがしかし、すべてのVBの実装がfolder2 objectを返すように見える一方で、いくつかの理由の名前空間のC#実装がfolder objectを返すことである

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

を持っていましたさ。 folder2だけが 'Self'プロパティを持っているので、追加キャストが必要です。

また、コメントの1つに指摘されているように、これはSTAのアパートメント内でのみ機能するので、Main()メソッドは[STAThread]で装飾する必要があります。

このような古い質問に答えるのは悪い習慣ではないことを願っていますが、私はどこにでも解決策が見つからないと非常に不満でした。

+1

古い、答えられていない質問に貴重な答えを与えることは、決して悪い習慣ではありません。:) – Henrik

+1

これはSTAのアパートでしか動作しないので、これを使うには 'Main()'メソッドを '[STAThread]'で修飾する必要があります –

+0

これは新しいラベルを設定するのに有効です。残念ながら、ネットワークドライブを元のラベルにリセットすることはできないようです。少なくともnullまたは空の文字列ではありません。 Windowsエクスプローラでは、空の文字列に名前を変更することでリセットできます。どのようにこのコードでこれを行うにはどのようなアイデア? – CodeX

関連する問題