在C#中使用带有正则表达式的Directory.GetFiles?

我有这个代码:

string[] files = Directory.GetFiles(path, "......", SearchOption.AllDirectories) 

我想要的只是返回不以p_t_ p_且扩展名为png或jpg或gif的文件。 我该怎么办?

默认情况下, Directory.GetFiles不支持RegEx ,您可以通过文件列表上的RegEx进行过滤。 看看这个清单:

 Regex reg = new Regex(@"^^(?!p_|t_).*"); var files = Directory.GetFiles(yourPath, "*.png; *.jpg; *.gif") .Where(path => reg.IsMatch(path)) .ToList(); 

你不能将正则表达式粘贴到参数中,它只是一个简单的字符串filter。 尝试使用LINQ来过滤掉。

 var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".jpg") || s.EndsWith(".png")) .Where(s => s.StartsWith("p_") == false && s.StartsWith("t_") == false) 

试试这段代码,搜索每个云端硬盘:

 DriveInfo[] drives = DriveInfo.GetDrives(); foreach (DriveInfo drive in drives) { if (drive.RootDirectory.Exists) { DirectoryInfo darr = new DirectoryInfo(drive.RootDirectory.FullName); DirectoryInfo[] ddarr = darr.GetDirectories(); foreach (DirectoryInfo dddarr in ddarr) { if (dddarr.Exists) { try { Regex regx = new Regex(@"^(?!p_|t_)"); FileInfo[] f = dddarr.GetFiles().Where(path => regx.IsMatch(path)); List myFiles = new List(); foreach (FileInfo ff in f) { if (ff.Extension == "*.png " || ff.Extension == "*.jpg") { myFiles.Add(ff); Console.WriteLine("File: {0}", ff.FullName); Console.WriteLine("FileType: {0}", ff.Extension); } } } catch { Console.WriteLine("File: {0}", "Denied"); } } } } }