我正在尝试从目录中获取一个特定的文件名。我尝试过的代码如下所示
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_开头,后面跟着两个数字,然后筛选出最近修改的文件。
所以输出应该是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 有人能帮我解决这个问题吗。
发布于 2021-12-17 06:23:41
string youngestFile = Directory.GetFiles(directoryPath)
.Where(o => Regexp.Contains(Path.GetFileNameWithoutExtension(o), "Monarch_\\d\\d"))
.OrderByDescending(o => File.GetLastWriteTime(o))
.FirstOrDefault();这是我的项目文件的快速复制和粘贴。Regexp.Contains()是我为做regexp比较而编写的简单方法之一。
注意我使用的正则表达式允许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应用条件、订单和获取第一个结果。
https://stackoverflow.com/questions/70388962
复制相似问题