[英]Using Directory.GetFiles with a regex in C#?
我有這段代碼:
string[] files = Directory.GetFiles(path, "......", SearchOption.AllDirectories)
我想要的是僅返回不以p_
和t_
開頭且擴展名為 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();
你不能將Regex粘貼到參數中,它只是一個簡單的字符串過濾器。 嘗試使用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<FileInfo> myFiles = new List<FileInfo>();
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");
}
}
}
}
}
我剛遇到這個,這就是我的處理方式。 它在 VB.net 中,但它應該很容易移植到 C#。
我需要處理以“king-”開頭的文件夾中的圖像。 但是,有很多文件名和模式,所以我最容易解析所有這些並將正則表達式作為字符串進行匹配。 我按字母順序對它們進行排序,因為如果我這樣做,我需要做的事情效果最好。
結果是您在枚舉文件本身時使用正則表達式,而不是嘗試將其用作參數。
Dim imgPath As String = Server.MapPath("~/images/")
Dim imgDir As New System.IO.DirectoryInfo(imgPath)
Dim RegexPath As String = "king-(.*)-count-\d{1,}\.jpg"
Dim RegX As New Regex(RegexPath)
Dim kingPics As List(Of String) = imgDir.EnumerateFiles("king-*.*").Select(Function(f) f.Name).ToList()
For Each pic As String In kingPics
Dim isMatch As Boolean = RegX.IsMatch(pic)
If isMatch Then
' I did my matching work here.
End If
Next
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.