我需要获取所有不包含上传字的文件。这是我尝试过的但是没有用。
string[] fileList = Directory.GetFiles(@"F:\Reports", @"*[^upload].xls")
foreach (string file in fileList)
{
Console.WriteLine(file);
}
任何帮助将不胜感激。
答案 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)
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的完整正则表达式的答案。