我正在嘗試從目錄中獲取特定的檔案名。我試過的代碼如下
DirectoryInfo dirInfo = new DirectoryInfo(directoryPath);
FileInfo recentlyModLogFile = (from files in dirInfo.GetFiles("^Monarch_[0-9]{2}$") orderby files.LastWriteTime descending select files).First();
//Output : Error
檔案名串列(輸入)
Monarch_05bridge //Date modified 16-12-2021 20:41
Monarch_04bridge //Date modified 16-12-2021 06:49
Monarch_04 //Date modified 16-12-2021 05:39
Monarch_02 //Date modified 16-12-2021 05:49
Monarch_02bridge //Date modified 14-12-2021 19:34
Monarch_01 //Date modified 14-12-2021 09:08
代碼應該查找檔案名以 Monarch_ 開頭的檔案,后跟 2 個數字,然后過濾掉最近修改的檔案
所以輸出應該是 Monarch_02
我也試過做
DirectoryInfo dirInfo = new DirectoryInfo(directoryPath);
FileInfo recentlyModLogFile = (from files in dirInfo.GetFiles(Monarch_ "*") orderby files.LastWriteTime descending select files).First();
//OUtput : Monarch_05bridge
有人可以幫我解決這個問題。
uj5u.com熱心網友回復:
string youngestFile = Directory.GetFiles(directoryPath)
.Where(o => Regexp.Contains(Path.GetFileNameWithoutExtension(o), "Monarch_\\d\\d"))
.OrderByDescending(o => File.GetLastWriteTime(o))
.FirstOrDefault();
這是從我的專案檔案中快速復制和粘貼的。Regexp.Contains() 是我撰寫的用于進行正則運算式比較的簡單方法之一。
注意我使用的正則運算式 allow Monarch_02,Monarch_02Bridge以及abcMonarch_09所有可能的結果。"^Monarch_\\d\\d$"如果你想要一個嚴格的規則,你可以使用。
有關詳細資訊,請參閱正則運算式。
private static Match GetFirstMatch(string text, string pattern)
{
Match match = Regex.Match(text, pattern, RegexOptions.None);
return match;
}
public static Boolean Contains(string text, string pattern)
{
return GetFirstMatch(text, pattern).Value != String.Empty;
}
基本上,使用 Directory.GetFiles(path) 獲取所有檔案,然后使用 LINQ 應用條件、排序并獲取第一個結果。
當您處理檔案系統時,Path、Directory和File類可以提供很多幫助。
uj5u.com熱心網友回復:
您可以使用正則運算式來實作這一點。
var regex = new Regex(@"Monarch _\d\d");
if(regex.IsMatch(fileName))
{
//you got your file
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/383551.html
