使用Directory.GetFiles获取名称中没有特定单词的文件

问题描述:

我需要获取所有不包含上载单词的文件。这是我试过的,但没有奏效。使用Directory.GetFiles获取名称中没有特定单词的文件

string[] fileList = Directory.GetFiles(@"F:\Reports", @"*[^upload].xls") 
foreach (string file in fileList) 
{ 
    Console.WriteLine(file); 
} 

任何帮助将不胜感激。

GetFiles documentation

searchPattern
Type: System.String
搜索字符串来匹配文件的路径名称。该参数可以包含有效文字路径和通配符(*?)字符的组合(请参见备注),但不支持正则表达式

这里是我的建议,可以让所有的Excel文件,而不只是那些老的Excel * .xls文件,然后我使用Contains过滤掉不需要的条目:

var fileList = Directory.GetFiles(@"F:\Reports", @"*.xls*") 
foreach (var file in fileList) 
{ 
    if (!file.ToLower().Contains("upload".ToLower())) 
     Console.WriteLine(file); 
} 

IDEONE demo

如果您只需要筛选出upload而非​​的文件,则可以使用Regex

if (!Regex.IsMatch(file, @"(?i)\bupload\b")) 

其中\b表示字面界限,(?i)表示不区分大小写的匹配。

another IDEONE demo(仅upload文件名过滤出去,一个与​​保持)

+0

谢谢你的解释。 –

+0

是否要排除具有“upload”作为整个单词的文件?或者“上传”也是不行? –

+1

我需要排除只有上传为整个单词的文件 –

[^upload]是否定字符类,将匹配除字符类中的字符以外的任何内容。相反,您可以使用negative look ahead(?!upload)

检查@Avinash Raj的完整正则表达式的答案。

+0

谢谢您的快速重播 –

+0

@BenJ不客气! – Kasramvd

Directory.GetFiles不支持正则表达式。相反,你可以使用LinqWhere方法来筛选结果,例如:

string[] fileList = Directory.GetFiles(@"F:\Reports", @"*.xls"); 
foreach (string file in fileList.Where(f => !f.Contains("upload")) 
{ 
    Console.WriteLine(file); 
} 
+0

谢谢你的回答。 –