.Net は、フォルダーを参照するための FolderBrowserDialog コントロールを提供します。ただし、これはモーダル ダイアログ ボックスです。フォームにドロップできるユーザー コントロールを作成する必要があります。そのため、すべてのローカル ドライブ、マップされたネットワーク ドライブ、UNC 共有、および Web フォルダー (WebDAV/SharePoint) を取得する必要がある独自の作成を検討してきました。Windows 7 と .Net 4.0 を使用しています。
ローカルおよびマップされたネットワーク ドライブ
DriveInfo.GetDrives() からローカル ドライブを取得できます。ただし、これらは利用可能/オンラインのドライブのみを表示しています。Windows エクスプローラーでは、切断されているか使用できないマップされたネットワーク ドライブも表示されます。
ネットワーク フォルダ/UNC 共有
これまでに確認したところ、.Net には UNC 共有を列挙するメカニズムがないようです。WNetOpenEnum
およびWNetEnumResource
関数を使用してネットワークの近隣を列挙するには、Interop to Win32 API を使用する必要があるようです。私はこれを機能させましたが、別の方法がないかどうか疑問に思っていました。
Web (WebDAV) フォルダーと SharePoint
Windows エクスプローラーで、いくつかの WebDAV フォルダーを構成しました。上記WNetOpenENum
と同じ Interop 呼び出しを使用するとWNetENumResource
、ノード「Web Client Network」と、接続されアクセス可能な WebDAV フォルダーが表示されました。
質問
- 構成されているがオフラインになっている、マップされたネットワーク ドライブを取得するにはどうすればよいですか?
- UNC 共有を列挙する別の方法はありますか、それとも上記の相互運用呼び出しの使用に固執していますか?
WNetEnumResource
「Microsoft Terminal Services」の空のノードが返されました。英語のテキストに基づいてフィルタリングせずに、これをフィルタリングするにはどうすればよいですか?- によって返される Web フォルダは、
WNetEnumResource
作成時に割り当てたユーザー フレンドリな名前ではなく、IP-Address@Port などの形式になっています\\nnn.nnn.nnn.nnn@18123
。Web フォルダのわかりやすい名前を取得するにはどうすればよいですか? - オフラインだった Web フォルダーはまったく表示されませんでしたが、Windows エクスプローラーには表示されています。オフラインのものを入手するための提案はありますか?