我因此使用System.IO目录获得了文件列表:
var srcFiles = Directory.GetFiles(remotePath);
我还有一个逗号分隔的字符串列表,我想检查每个字符串是否在上述文件的名称中不存在。例如:
string[] filterOn = EndPoint.FileNameDoesNotContainFilter.Split(',').ToArray();
为我提供了以下数组:
filterOn contains ["GoodFile", "EvenBetterFile"]
现在,两个字符串中的任何一个都没有文件的 将会替换当前srcFiles列表中的所有文件(或者更新的列表)。我正在尝试使用LINQ来做到这一点,但不能完全达到目标。怎么做?
编辑:@dvo的回答为我提供了正确的文件,但是,有时过滤器字符串包含在传入的remotePath中。
典型路径/文件:C:\ TEMP \ APPS \ AMS \ Services \ sc0189v \ APPS \ GoodFile \ test.txt。
如您所见,路径中有“ GoodFile”,但没有文件名。但是该文件应被拒绝。我想我正在System.IO.Directory中寻找可能有帮助的东西。不确定,真的。
答案 0 :(得分:0)
尝试一下:
var noMatch = srcFiles.Where(file => !filterOn.Any(filter => file.ToUpperInvariant().Contains(filter.ToUpperInvariant()))).ToList();
这将创建一个新列表,其中文件名不包含任何过滤器。通过将文件名和过滤器都转换为大写,可以忽略大小写。如果将noMatch
替换为srcFiles
,则可以将结果存储在同一列表中。如果从.ToUpperInvariant()
子句的两个部分都删除了Any
,则可以区分大小写。您可以通过从!
子句中删除Where
来捕获过滤器匹配项。
希望这会有所帮助!