提取文件但不提取具有“DelCustsExports”的文件

时间:2014-11-21 10:47:09

标签: c#

我有这些文件名:

Erb3PCustsExport-303_20080318_223505_000.xml
Erb3PCustsExport-303_20080319_063109_000_Empty.xml
Erb3PDelCustsExport-303_20080319_062410_000.xml

我不想提取以empty结尾的文件。我只想提取名称中包含CustxExport的文件,但如果文件名为DelCustsExport,我不想提取它。

我尝试了什么

这是我的代码

foreach (string file in Directory.EnumerateFiles(xmlFolder, "*CustsExport*.xml")
    .Where(fn => !Path.GetFileNameWithoutExtension(fn).EndsWith("Empty")))

问题

这样可以提取名称中包含CustsExport的所有文件,而不是提取以Empty结尾的文件,但这不适用于DelCustsExport等文件/ p>

你能帮忙吗

2 个答案:

答案 0 :(得分:2)

您是否可以在where子句中添加其他条件以确保文件名不包含DelCustsExport

foreach (string file in Directory.EnumerateFiles(xmlFolder, "*CustsExport*.xml")
    .Where(fn => !Path.GetFileNameWithoutExtension(fn).EndsWith("Empty")
                 && !Path.GetFileNameWithoutExtension(fn).Contains("DelCustsExport")))

答案 1 :(得分:1)

我不知道您想要的确切规则,但正则表达式为您提供了很多自由和灵活性。只需从示例中扣除我可以获得的信息,此代码就可以产生所需的结果:

var validFilename = new Regex(@"(?<!Del)CustsExport.*(?<!Empty)\.xml$");
foreach (var file in Directory
    .EnumerateFiles(xmlFolder)
    .Where(fn => validFilename.IsMatch(fn)))