获取文件而不查看特定目录或查看两个级别

时间:2015-07-10 22:44:21

标签: c#

我正在尝试枚举目录下的文件路径。这个目录有很多子目录,即使我正在寻找一个特定的文件,枚举也需要很多时间。所以试图优化它。

这是结构:

主要 - >这是我开始寻找的地方

 string path = "something main here";

Directory.EnumerateFiles(path , "grouptest.log", SearchOption.AllDirectories);

现在在主目录中,我知道所有grouptest.log都存在。

main -> sampleDir1 -> textDir1 -> StoryDir
                               -> grouptest.log

                   -> textDir2 -> StoryDir
                               -> grouptest.log

        sampleDir2 -> textDir1 -> StoryDir
                               -> grouptest.log

它总是存在两个级别。在Main \ SampleDirX \ textDirX \ grouptest.log下。它根本不存在于StoryDir下,所以我们不必看这里。

我没有找到任何方法从EnumerateFiles()或GetFiles()中排除模式,并且无法在搜索模式中使用正则表达式。

尝试了方法:

  1. 直接枚举grouptest.log。
  2. 使用

    获取main的子目录
    Directory.GetDirectories(path, "*", SearchOption.AllDirectories).Where(dir => !Path.GetFullPath(dir).Contains(@"\StoryDir")).ToList();
    
  3. 然后阅读每个subDir

    Directory.EnumerateFiles(subDir , "grouptest.log", SearchOption.TopDirectoryOnly);
    

    还需要很长时间。

    如何在枚举文件之前指定我想要排除要读取的目录?

    EnumerateFiles并在文件路径上运行where子句仍然需要很长时间。我希望能够首先排除StoryDir路径,或者只看两个级别。

1 个答案:

答案 0 :(得分:1)

带有SearchOptions.AllDirectories的GetDirectories将始终扫描整个文件结构,然后使用StoryDir过滤所有路径。 如果您只扫描根目录(两次到达textdir),您可以避免扫描StoryDirs:

 for (i = 0; i < 5; i++, i++, i++, i++, i++)
    ...