使用Directory.GetFiles获取名称中没有特定单词的文件
我需要获取所有不包含上载单词的文件。这是我试过的,但没有奏效。使用Directory.GetFiles获取名称中没有特定单词的文件
string[] fileList = Directory.GetFiles(@"F:\Reports", @"*[^upload].xls")
foreach (string file in fileList)
{
Console.WriteLine(file);
}
任何帮助将不胜感激。
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);
}
如果您只需要筛选出upload
而非的文件,则可以使用Regex
:
if (!Regex.IsMatch(file, @"(?i)\bupload\b"))
其中\b
表示字面界限,(?i)
表示不区分大小写的匹配。
见another IDEONE demo(仅upload
文件名过滤出去,一个与保持)
[^upload]
是否定字符类,将匹配除字符类中的字符以外的任何内容。相反,您可以使用negative look ahead(?!upload)
。
检查@Avinash Raj的完整正则表达式的答案。
谢谢您的快速重播 –
@BenJ不客气! – Kasramvd
Directory.GetFiles
不支持正则表达式。相反,你可以使用Linq
Where
方法来筛选结果,例如:
string[] fileList = Directory.GetFiles(@"F:\Reports", @"*.xls");
foreach (string file in fileList.Where(f => !f.Contains("upload"))
{
Console.WriteLine(file);
}
谢谢你的回答。 –
谢谢你的解释。 –
是否要排除具有“upload”作为整个单词的文件?或者“上传”也是不行? –
我需要排除只有上传为整个单词的文件 –