首页 > 解决方案 > 递归文件搜索缺少子目录

问题描述

我有一个类似的文件夹结构

D:\Main\
D:\Main\Folder1\

我下面的代码将扫描目录中的任何文件D:\Main\,但它错过了D:\Main\Folder1\子目录。我认为设置SearchOption.AllDirectories将扫描所有子目录,但对我来说并非如此,因为当我的foreach循环被命中时,计数总是等于 0

我需要更改什么以便此代码按我的意愿执行?

static void MoveFiles()
{
    String directoryName = "D:\\_TestData";
    DirectoryInfo dirInfo = new DirectoryInfo(directoryName);
    if (dirInfo.Exists == false)
        Directory.CreateDirectory(directoryName);

    List<String> MyMusicFiles = Directory.GetFiles("D:\\_FinishedData", "*.*", SearchOption.AllDirectories).Where(s => s.EndsWith(".mp4") || s.EndsWith(".avi") || s.EndsWith(".mkv ")).ToList();

    foreach (string file in MyMusicFiles)
    {
        FileInfo mFile = new FileInfo(file); 
        if (new FileInfo(dirInfo + "\\" + mFile.Name).Exists == false)     
           mFile.MoveTo(dirInfo + "\\" + mFile.Name); 
    }
}

@Renee 这些是我得到的编译错误 在此处输入图像描述

标签: c#recursion

解决方案


我无法解释为什么 Where 构造不起作用,但是如果您只需要将文件限制为某些扩展名,那么将选择交给文件系统会感觉更有效。

使用此 LINQ 查询为您提供一个 IEnumerable 字符串,其文件名与您的条件匹配:

 var MyMusicFiles  = 
       from search in new [] {"*.mp4", "*.avi", "*.mkv"}
       from file in Directory.EnumerateFiles(@"D:\_FinishedData", search, SearchOption.AllDirectories)
       select file;

推荐阅读