c# - Lambda 表达式返回数组中的排除值
问题描述
我有一些文件夹,我正在阅读并处理一些文件
const string claims = @"\\myServerPath\Incident Reports\";
const string archive = @"\\myServerPath\Incident Reports\Archive\";
const string errorData = @"\\myServerPath\Incident Reports\DataErrorFiles\";
我能够阅读并提取这些文件中所需的所有数据。
然后我在这样的数组中有两个文件目录,存档和错误数据
string[] excludeDirectories = new string[] { archive, errorData };
然后我尝试循环并做一些这样的清理
List<string> dirs = Directory.GetDirectories(claims, "*", SearchOption.AllDirectories).Where(d => excludeDirectories.All(e =>!d.StartsWith(e))).ToList();
foreach(string s in SortByLength(dirs))
{
if (Directory.GetFiles(s).Count() == 0)
{
Directory.Delete(s);
}
}
每次它删除两个目录时..我的 lambda 表达式有什么问题使它继续包含这两个目录?
更奇怪的是,在我要处理文件的顶部,我以类似的方式拾取文件,这很有效。Archive 或 DataErrorFiles 中的文件被忽略。
List<string> processFiles = Directory.GetFiles(claims, "*.xlsx",
SearchOption.AllDirectories).Where(d => excludeDirectories.All(e =>!d.StartsWith(e))).ToList();
当我有一个文件位于声明的“根”目录时,它会选择这些文件并处理它们。然后它将它们相应地移动到存档或错误中。当我再次运行时(文件现在位于存档中),我不再读取该文件。排除正在获取 excel 文件,但不是目录清理。
解决方案
这样的事情呢?
List<string> dirs = Directory.GetDirectories(claims, "*", SearchOption.AllDirectories)
.Where(d => !excludeDirectories.Any(e => d.StartsWith(e)))
.ToList();
推荐阅读
- android - Android Studio 缺少一些属性
- json - 如何从json获取数据中对两个或多个值求和
- python - 为什么 .join() 不是字符串的属性?
- http - 充当中间人时的状态码指南
- c# - WPF MVVM Datagrid 两种方式绑定
- prolog - 使用 as( 代码 ) 解码 udp_receive 接收的原始字节
- angular - 在 ng-template 中使用函数强制转换变量时是否会对性能产生重大影响?
- python - Python:如何优化此代码以获得更好的性能
- python - 如何在 Django 序列化器中获取请求用户 ID?
- powershell - 仅在戴尔机器上强制更新驱动程序