c# - 递归文件搜索缺少子目录
问题描述
我有一个类似的文件夹结构
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);
}
}
解决方案
我无法解释为什么 Where 构造不起作用,但是如果您只需要将文件限制为某些扩展名,那么将选择交给文件系统会感觉更有效。
使用此 LINQ 查询为您提供一个 IEnumerable 字符串,其文件名与您的条件匹配:
var MyMusicFiles =
from search in new [] {"*.mp4", "*.avi", "*.mkv"}
from file in Directory.EnumerateFiles(@"D:\_FinishedData", search, SearchOption.AllDirectories)
select file;
推荐阅读
- vue.js - 元素 UI 不显示来自 fetch-suggestion 的数据
Vue.js - javascript - 从源“website_url”访问“url”处的 XMLHttpRequest 已被 CORS 策略 PHP Javascript 为什么阻止?
- c++ - Gradle 构建的带有 Boost Lib 的 C++ 示例项目
- reactjs - Material-UI菜单打开后抖动
- javascript - 允许单词列表
- javascript - NodeJS express body undefined 使用快速解析
- c++ - 带有clang的Mac的VScode无法识别C ++头文件
- macos - Dayle Rees 设置 Vim 主题
- python - 无法计算出在 Python 中工作的二维数组
- android - 不支持的 LaTex 导致 StringIndexOutOfBoundsException