首页 > 解决方案 > 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 文件,但不是目录清理。

标签: c#lambda

解决方案


这样的事情呢?

List<string> dirs = Directory.GetDirectories(claims, "*", SearchOption.AllDirectories)
    .Where(d => !excludeDirectories.Any(e => d.StartsWith(e)))
    .ToList();

推荐阅读