linq - System.IO - 使用 Directory/LINQ 将列表中的某些文件替换为其他文件
问题描述
因此,我得到了使用 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 中寻找可能有帮助的东西。不确定,真的。
解决方案
尝试这个:
var noMatch = srcFiles.Where(file => !filterOn.Any(filter => file.ToUpperInvariant().Contains(filter.ToUpperInvariant()))).ToList();
这将创建一个新列表,其中文件名不包含任何过滤器。这通过将文件名和过滤器都转换为大写来忽略大小写。如果替换为 ,则可以将结果存储在同一个列表noMatch
中srcFiles
。如果从子句.ToUpperInvariant()
的两个部分中删除,则可以使其区分大小写。您可以通过从子句Any
中删除来捕获过滤器匹配项。!
Where
希望这可以帮助!
推荐阅读
- r - 如何在其他包的基础上构建一个 R 包?
- php - 遍历“数据”下的每个元素
- python - Python 3:将十六进制转换为整数时出现意外的 ValueError
- java - 如何让 WebView 在后台保持视频或音频播放?
- python - 将多个 id 传递到 url Django
- python - Django:CreateView 不显示字段并将其设置为 request.user (ForeignKey)
- perl - 使用 Perl 对数组的哈希进行排序
- javascript - RegExp 在前两个新行之后没有得到所有内容
- python - 如何从列表中删除多个元素?
- javascript - 如何在 Web Speech API 中循环问题