すべてのオープンシステム/特別なフォルダーを識別します
質問
現在、以下を使用しています オープンエクスプローラーウィンドウのすべてのリストボックスでパスを取得する:
foreach (SHDocVw.InternetExplorer j in new SHDocVw.ShellWindows()) {
if (j.Name == "Windows Explorer") {
ListView1.Items.Add(j.LocationURL);
}
}
ただし、コンピューター、リサイクルビン、ネットワークなどの特別なフォルダーの場所を返さないでください。これらのフォルダーを識別する方法はあります。 shell:MyComputerFolder
コンピューター用?
解決 2
もしも j.LocationName
だった null
現在のシステムフォルダーの名前と比較しました。 Windows特別フォルダーの現在の名前を取得します, 、次に、手動でパスを追加しました shell:MyComputerFolder
他のヒント
使用する必要があります Environment.GetFolderPath(Environment.SpecialFolder)メソッド
Environment.SpecialFolderは、すべてのWindowsの「特別な」フォルダー(私のドキュメント、プログラムファイル、デスクトップなど)の値を持つ列挙です。
アップデート:この方法を使用して、特定のパスが特別なフォルダーであるかどうかを判断できます。
public static bool IsSpecialFolder(string folderPath)
{
foreach (Environment.SpecialFolder specialFolderType in Enum.GetValues(typeof (Environment.SpecialFolder)))
{
var specialFolderLocation = Environment.GetFolderPath(specialFolderType);
if(specialFolderLocation.Equals(folderPath, StringComparison.InvariantCultureIgnoreCase))
return true;
}
return false;
}
たとえば、電話することもできます IsSpecialFolder(j.LocationURL)
それぞれのため j
オープンフォルダーのどれが特別なフォルダーであるかを確認します。
使える Environment.SpecialFolder このような列挙
Environment.GetFolderPath(Environment.SpecialFolder.System))
リンクには、具体的なコードの例があります。
パスを取得する必要があります...しかし、コンピューター、リサイクルビン、ネットワークなどの特別なフォルダーの場所を返しません。
あなたが遭遇している当面の問題はそれです LocationURL
戻り値 ""
ウィンドウの場所が物理ディレクトリではない場合。 「マイコンピューター」、「リサイクルビン」、「ネットワーク」の場合、これは驚くことではありません。これらは仮想フォルダーです。そこの そうではありません ディスク上の場所ではないため、それらを指すことができるパスまたはURL。
ただし、「ドキュメント」に移動すると します 特別なフォルダーでもありますが、ディスク上のディレクトリに対応しています) LocationURL
まだ戻ってきます ""
. 。ここに できる あなたに道を与えますが、それはそうしないことを選択します。これはやや意地悪なようです。
私はそれを言ういくつかのドキュメントを見つけました シェルウィンドウ 戻り値 InternetExplorer
オブジェクト. 。ドキュメントが見つかりませんでした ShellBrowserWindow
あなたが使用しているクラス InternetExplorer
似ているか同一であるように見えるので、いくつかあります ドキュメンテーション Intellisenseのプロパティ名を見るだけではなく、参照できます。
有用に見える他の唯一のプロパティはです LocationName
, 、仮想または特別なフォルダーでも何かを返します。ただし、「ドキュメント」や「ライブラリ」などの文字列を返します。これは、プログラムで実際に使用できるものではありません(さまざまなロケール、さまざまなWindowsバージョンなどで異なります。)
必要なのがリストに表示されるものだけである場合、 LocationName
おそらく十分でしょう。実際にパスが必要な場合は、おそらく運が悪いでしょう(とにかく、あなたはとにかくそうであるでしょう。