System.IO-使用目录/ LINQ将列表中的某些文件替换为其他文件

时间:2019-05-06 15:40:30

标签: linq system.io.file system.io.directory

我因此使用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中寻找可能有帮助的东西。不确定,真的。

1 个答案:

答案 0 :(得分:0)

尝试一下:

var noMatch = srcFiles.Where(file => !filterOn.Any(filter => file.ToUpperInvariant().Contains(filter.ToUpperInvariant()))).ToList();

这将创建一个新列表,其中文件名不包含任何过滤器。通过将文件名和过滤器都转换为大写,可以忽略大小写。如果将noMatch替换为srcFiles,则可以将结果存储在同一列表中。如果从.ToUpperInvariant()子句的两个部分都删除了Any,则可以区分大小写。您可以通过从!子句中删除Where来捕获过滤器匹配项。

希望这会有所帮助!