0

そのため、一連の構成ファイルが保存されているディレクトリがありますが、構成ファイルも含むいくつかのサブディレクトリもあります。ステーションごとにすべての構成ファイルを収集する機能がありましたが、現在はサブフォルダーではなく、ディレクトリ内のファイルのみを収集しています。古いコード:

    string MasterList = "ConfigsForStation1.txt";
    string dirC = "..\\config\\Station1\\";
    foreach (FileInfo fileC in dirC.GetFiles())
            {
                if(!System.IO.Path.GetExtension(fileC.FullName).EndsWith(".confg"))
                {     WriteToList(fileC,MasterList);}

    }

そして今、このサブディレクトリのもので、これらの行に沿って実装されています:

        string MasterList = ...;
        string dirC = ...;
        //collect files in sub directories substations 1 & 2
        foreach(DirectoryInfo Dx in dirC.GetDirectories())
        {   foreach(FileInfo fileC in Dx.GetFiles())
            {...}
        }
        //collect files in parent directory station 1
        foreach(FileInfo fileC in dirC.GetFiles())
        {...}

私の質問は: foreach 内に foreach をネストするのではなく、すべてのサブフォルダーからファイルを収集するよりクリーンな方法はありますか? 次に、親のものに対して3番目のパスを実行します。少しずさんな感じがして、私のためにそうする dirC.getAllsub() のようなコマンドがあるように感じますか? コードをクリーンアップするためのヒントやアイデアを探しているだけです。

4

5 に答える 5

2

ファイルを自動的に再帰するように指示するために使用できるDirectory.EnumerateFiles()パラメーターを渡すことができます。SearchOption.AllDirectories

次のようなことができるはずです。

foreach (string filename in Directory.EnumerateFiles(dirC, "*.confg", SearchOption.AllDirectories))
    ... Do something with filename

または、すべてのファイルを処理する必要がある場合:

foreach (string filename in Directory.EnumerateFiles(dirC, "*", SearchOption.AllDirectories))
    ... Do something with filename
于 2013-06-12T19:49:09.830 に答える
1

これをコメントとして書きたかったのですが、stackoverflow が許可してくれませんでした。

あなたが求めていることを行うための多くの方法を提供するこの質問をチェックしてください。

于 2013-06-12T19:50:29.043 に答える
1

Directory.GetFiles を使用します。

var files = Directory.GetFiles("C:\\", "*", SearchOption.AllDirectories);
于 2013-06-12T19:50:51.680 に答える
1

このGetFiles()メソッドは、それらすべてを一度に返します。

String dirC = "..\\config\\Station1\\";
DirectoryInfo di = new DirectoryInfo(dirC);
FileInfo[] fia = di.GetFiles("*.*", SearchOption.AllDirectories);
foreach (FileInfo fi in fia)
{
    //do something with the file
}

検索パターン*.*は、探しているファイルに適合するものに置き換えることができます ( *.cfg.

于 2013-06-12T19:52:34.177 に答える
1

とともに使用Directory.GetFiles()SearchOption.AllDirectoriesます。それは自動的に再帰します。

于 2013-06-12T19:49:16.220 に答える