4

「c:\ Users」のウィンドウ内のユーザーフォルダーのリストを反復処理しようとしていますが、Microsoftの組み込みユーザーフォルダーを除外しています。以下は、この偉業を達成するために使用しているコードセグメントですが、何らかの理由で意図したとおりに機能していません。

private readonly List<String> _exclusion = new List<String>
                                                   {
                                                       "All Users",
                                                       "Default",
                                                       "LocalService",
                                                       "Public",
                                                       "Administrator",
                                                       "Default User",
                                                       "NetworkService"
                                                   };

public static bool FoundInArray(List<string> arr, string target)
{
    return arr.Exists(p => p.Trim() == target);
}

foreach (string d in Directory.GetDirectories(sDir).Where(d => !FoundInArray(_exclusion,d)))
{
    richTextBox1.Text += d + Environment.Newline;
}

なぜこれが機能しないのかわかりませんが、誰かが私にこれについての洞察を提供できますか?

4

2 に答える 2

6

Directory.GetDirectories()は、ディレクトリの最後の部分だけでなく、ディレクトリのフルパスを返します。

GetDirectories()によって返されたパスの最後のコンポーネントを取り除き、それを現在配列にあるものと比較すると、誤検知と誤検知が発生します。

代わりに、Environment.SpecialFoldersを使用して、現在のユーザーとオペレーティングシステムのバージョンに固有の特定の特別なフォルダーのパスを取得します。

private readonly List<String> _exclusion = new List<String>
{
    Environment.GetFolderPath(Environment.SpecialFolder.MyMusic),
    // etc.
}
于 2012-04-04T00:46:44.527 に答える
2

ラムダ式の場合:'d'はディレクトリのフルネーム(パスを含む)であるため、実際には配列に含まれていません。

あなたができること:

public static bool FoundInArray(List<string> arr, string target)
{
    return arr.Any(p => new DirectoryInfo(target).Name == p);
}
于 2012-04-04T00:45:27.977 に答える