C# 通过非相似掩码查找文件
我需要从带有搜索选项的目录加载文件。我创建了两种搜索模式,首先我必须查找以“Client”开头且没有“_delete”扩展名的文件 第二次搜索必须找到以“Client”开头、扩展名为“\u delete”的文件 我实现了测试代码,但没有找到文件C# 通过非相似掩码查找文件,c#,regex,getfiles,C#,Regex,Getfiles,我需要从带有搜索选项的目录加载文件。我创建了两种搜索模式,首先我必须查找以“Client”开头且没有“_delete”扩展名的文件 第二次搜索必须找到以“Client”开头、扩展名为“\u delete”的文件 我实现了测试代码,但没有找到文件 string mask_not_like = @"Client*[^_delete\s].xlsx"; string mask = "Client*_delete.xlsx"; path1 = "c:\Client_Test.xlsx"; path2
string mask_not_like = @"Client*[^_delete\s].xlsx";
string mask = "Client*_delete.xlsx";
path1 = "c:\Client_Test.xlsx";
path2 = "c:\Client_Test_delete.xlsx";
var searchPattern1 = new Regex(mask_not_like, RegexOptions.IgnoreCase);
var searchPattern2 = new Regex(mask, RegexOptions.IgnoreCase);
var files1 = Directory.GetFiles(path1).Where(f => searchPattern1.IsMatch(f));
var files2 = Directory.GetFiles(path1).Where(f => searchPattern2.IsMatch(f));
第一个问题是,您将文件路径传递给一个需要目录的方法
path1 = "c:\Client_Test.xlsx";
// path one is not a directory...
var files1 = Directory.GetFiles(path1).Where(f => searchPattern1.IsMatch(f));
接下来,你把事情复杂化了。不需要(或担保)正则表达式
你有两个案子;以“Client”开头并以“_delete”结尾的文件,以及以“Client”开头但不以“Client”结尾的文件。“Client”是两者的共同点,因此,只需抓取以Client开头的所有文件,然后查找以“\u delete”结尾的文件,其余的文件则不以“\u delete”结尾
编辑:我刚刚注意到您错误地说扩展名是“_delete”,而实际上,它只是文件名的结尾。所以
var allFiles = Directory.GetFiles(path, "Client*.*");
var endInDdelete = allFiles.Where(f => Path.GetFileNameWithoutExtension(f).EndsWith("_delete");
var doNotEndInDelete = allFiles.Except(endInDelete);
为什么还要用正则表达式呢
var clientFiles = Directory.GetFiles("C:\\", "Client*.xlsx");
var clientFilesWithDelete = clientFiles.Where(clientFile => clientFile.EndsWith("_delete.xlsx"));
var clientFilesWithoutDelete = clientFiles.Except(clientFilesWithDelete);
正则表达式,因为我在objects@zrabzdn:您的任何要求都不需要正则表达式。。。我在7分钟前发布了同样的答案:)(:同意,这是显而易见的解决方案。我同情地给了你+1;-)
var clientFiles = Directory.GetFiles("C:\\", "Client*.xlsx");
var clientFilesWithDelete = clientFiles.Where(clientFile => clientFile.EndsWith("_delete.xlsx"));
var clientFilesWithoutDelete = clientFiles.Except(clientFilesWithDelete);