C# Lambda表达式返回数组中排除的值
我有一些文件夹,我正在阅读和处理一些文件C# Lambda表达式返回数组中排除的值,c#,lambda,C#,Lambda,我有一些文件夹,我正在阅读和处理一些文件 const string claims = @"\\myServerPath\Incident Reports\"; const string archive = @"\\myServerPath\Incident Reports\Archive\"; const string errorData = @"\\myServerPath\Incident Reports\DataEr
const string claims = @"\\myServerPath\Incident Reports\";
const string archive = @"\\myServerPath\Incident Reports\Archive\";
const string errorData = @"\\myServerPath\Incident Reports\DataErrorFiles\";
我能够通读并提取这些文件中所需的所有数据
然后我将两个文件dir、archive和errorData放在这样的数组中
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);
}
}
然后我试着循环,像这样做一些清理
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);
}
}
List dirs=Directory.GetDirectories(claims,“*”,SearchOption.AllDirectories)。其中(d=>excludeditories.All(e=>!d.StartsWith(e))).ToList();
foreach(排序长度(dirs)中的字符串s)
{
if(Directory.GetFiles.Count()==0)
{
目录。删除;
}
}
每次删除两个目录时。。我的lambda表达式中有什么错误使得它一直包含这两个
更奇怪的是,在我处理文件的顶部,我以类似的方式拾取文件,这很有效。将忽略存档或数据错误文件中的文件
List<string> processFiles = Directory.GetFiles(claims, "*.xlsx",
SearchOption.AllDirectories).Where(d => excludeDirectories.All(e =>!d.StartsWith(e))).ToList();
List processFiles=Directory.GetFiles(声明“*.xlsx”,
其中(d=>excludeDirectories.All(e=>!d.StartsWith(e))).ToList();
当我在索赔的“根”目录中有一个文件时,它将拾取这些文件并处理它们。然后,它会相应地将它们移动到存档或出错位置。当我再次运行(文件现在位于存档中)时,我不会再次读取该文件。“排除”正在获取excel文件,但没有进行目录清理。这可能是大小写问题-请尝试更改StartsWith()
调用以进行不区分大小写的比较:
d => excludeDirectories.All(e =>!d.StartsWith(e, StringComparison.InvariantCultureIgnoreCase))
像这样的怎么样
List<string> dirs = Directory.GetDirectories(claims, "*", SearchOption.AllDirectories)
.Where(d => !excludeDirectories.Any(e => d.StartsWith(e)))
.ToList();
List dirs=Directory.GetDirectories(声明,“*”,SearchOption.AllDirectories)
.Where(d=>!excludeDirectories.Any(e=>d.StartsWith(e)))
.ToList();
相同的结果:(当我在debug中停留时,ExcludeDirectory中的值和dirs中的值看起来完全相同?是的!TYSM!我对我的原始帖子进行了编辑,关于我处理文件的第一部分。。为什么我的lambda在那里似乎工作正常,但在这里不工作?TBH我不太确定你的'where'在做什么。我假设你想要所有的dirs。)t没有以任何排除目录开头。excludeditories.any(e=>d.StartsWith(e))
询问“在excludeditories
中是否有任何东西以d
开头?”。!
给出相反的结果。因此,如果某个东西以d
开头,我们得到一个false,并且Where
排除该元素。