Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过非相似掩码查找文件_C#_Regex_Getfiles - Fatal编程技术网

C# 通过非相似掩码查找文件

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

我需要从带有搜索选项的目录加载文件。我创建了两种搜索模式,首先我必须查找以“Client”开头且没有“_delete”扩展名的文件

第二次搜索必须找到以“Client”开头、扩展名为“\u delete”的文件

我实现了测试代码,但没有找到文件

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);