2

C# (.NET) を使用して、次のようなディレクトリ検索マスクを指定してファイル システムを検索するにはどうすればよいですか? (?)

\\server\Scanner\images\*Images\*\*_*

たとえば、最初にすべての最上位ディレクトリを見つける必要があります。

\\server\Scanner\images\Job1Images
\\server\Scanner\images\Job2Images

...次に、検索マスクをさらに進める必要があります。

\\server\Scanner\images\Job1Images\*\*_*
\\server\Scanner\images\Job2Images\*\*_*

これはそれほど複雑に思えませんが、私の人生では理解できません...

前述のとおり、C# と .NET を使用しています。検索では、ディレクトリまたはファイルを見つけようとする場合があります。(つまり、*.txt、または <*ディレクトリ>)

4

4 に答える 4

2

このような:

トップレベルのディレクトリ:

  //get Top level
   string[] TopLevel = Directory.GetDirectories(path);

次に、ワイルドカードパターンを使用して、このフォルダの復元機能を実行する必要があります。次に例を示します。

 // Only get subdirectories that begin with the letter "p." 
            string pattern = "p*";
            string[] dirs = folder.GetDirectories(path, pattern);

ワイルドカードを使用して配列出力を取得することをお勧めします。これにより、再帰関数を使用する場合やパスを直接検索する場合に、どちらが最適な方法であるかがわかります。

于 2012-11-20T17:01:19.403 に答える
1
    public static IEnumerable<string> GetImages()
{    
    //For each "*Image" directory
    foreach (var jobFolder in Directory.EnumerateDirectories(@"\\server\Scanner\images", "*Images"))
    {
        //For each first level subdirectory
        foreach (var jobSubFolder in Directory.EnumerateDirectories(jobFolder))
        {
            //Enumerate each file containing a '_'
            foreach (var filePath in Directory.EnumerateFiles(jobSubFolder, "*_*", SearchOption.TopDirectoryOnly))
            {                               
                yield return filePath;
            }
        }
    }
}

各「*Image」ディレクトリの最初のレベルのサブディレクトリからのファイルのみが列挙されます。

最後に、次のように使用できます。

foreach (var path in GetImages())
            {
                Console.WriteLine(path);
            }
于 2012-11-20T18:58:00.877 に答える