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

时间:2015-07-13 10:08:08

标签: c# regex

我需要获取所有不包含上传字的文件。这是我尝试过的但是没有用。

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

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

Directory.GetFiles不支持正则表达式。相反,您可以使用Linq Where方法过滤结果,例如:

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

答案 1 :(得分:1)

请参阅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而非uploading的文件,则可以使用Regex

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

\b代表单词边界,(?i)代表不区分大小写的匹配。

请参阅another IDEONE demo(仅过滤掉upload的文件名,保留uploading的文件名仍然存在)

答案 2 :(得分:0)

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

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