0

TestName.lol内にある名前のシステム内のすべてのファイルを検索したいと思いますTestRoot\TestSubFoler\Test\

つまり、TestRoot\TestSubFoler\Test\TestName.lolディスクCDの両方にある場合、2 つのファイルを取得したいと思います。

これを行うためのさまざまな方法を検討しました。

  1. で始まりC:\D:\再帰的に を検索しTestRootます。次に、 と の代わりに、見つかったすべての出現に対して同じことをC:\行いD:\ます。等々。

  2. すべてのフォルダで を再帰的に検索しますTestName.lol。次に、「間違った」フォルダにあるものを除外します。(私の場合、そのようなファイルの推定数は大きくないため、これはより高速になると思います:1〜10)

  3. ??? これにはもっと良い方法があると思います(よりエレガントまたはパフォーマンスが向上します)。とにかく、私の解決策が正しいと思われる場合は、確認してください。

ありがとう。

編集: 複雑なパターンを使用してディレクトリ内のファイルを検索する同様の質問。

4

2 に答える 2

1

個人的には、再帰を避けるのは難しいと感じています。ファイル システムがインデックス化されていないためです。Google デスクトップまたは Microsoft デスクトップ サーチは、すべてのファイルのインデックスを作成しました。クエリを実行すると、非常に迅速に回答が得られます。

選択肢は、.net フレームワークが再帰を行うか、自分で行うかです。

他のオプションはLinqです - これは.netフレームワークが再帰を行うと思います。しかし、それはよりきれいになります

リンク

http://msdn.microsoft.com/en-us/library/bb882649.aspx

// Take a snapshot of the file system.
        System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);

        // This method assumes that the application has discovery permissions 
        // for all folders under the specified path.
        IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);

        string searchTerm = @"Visual Studio";

        // Search the contents of each file. 
        // A regular expression created with the RegEx class 
        // could be used instead of the Contains method. 
        // queryMatchingFiles is an IEnumerable<string>. 
        var queryMatchingFiles =
            from file in fileList
            where file.Extension == ".htm" 
            let fileText = GetFileText(file.FullName)
            where fileText.Contains(searchTerm)
            select file.FullName;

        // Execute the query.
        Console.WriteLine("The term \"{0}\" was found in:", searchTerm);
        foreach (string filename in queryMatchingFiles)
        {
            Console.WriteLine(filename);
        }

.net コード

foreach (FileInfo fi in directory.GetFiles())
{
  // Console.WriteLine(@"Found file: [{0}] in directory: [{1}]", fi.Name, directory.FullName);

}
 foreach (DirectoryInfo diSourceSubDir in directory.GetDirectories())
 {
    // Console.WriteLine(@"Sub Folder {0} found.", diSourceSubDir.FullName);
 }
于 2013-04-08T13:25:08.863 に答える