ディレクトリとサブディレクトリを含むツリービューをロードしています。私の電話:
string[] dirs = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
必要なすべてのディレクトリとそうでないディレクトリを返します...アクセスできない/仮想の「マイミュージック」、「マイビデオ」など...もちろん、ライブラリ構造のため、これらのディレクトリでは再帰を実行できません(アクセス拒否された)...
これらのアクセスできないディレクトリへの入力を回避するにはどうすればよいですか? OS が Vista または 7 の場合は、配列を反復処理して不要なディレクトリを削除し、XP のままにしておくことができます...しかし、これに対するより「エレガントな」ソリューションがあるかどうか知りたいですか?
Wimの助けを借りて、私はこれを思いつきました:
private List<string> MyDocuments()
{
List<string> dirs = new List<string>(Directory.GetDirectories(
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)));
for (int i = 0; i < dirs.Count-1; i++)
{
DirectoryInfo di = new DirectoryInfo(dirs[i]);
if (di.Attributes.HasFlag(FileAttributes.ReparsePoint))
dirs.RemoveAt(i);
}
return dirs;
}