目前我的应用程序使用string [] subdirs = Directory.GetDirectories(path)来获取子目录列表,现在我想提取列表中最新(最后修改过的)子目录的路径。
实现这一目标的最简单方法是什么? (效率不是主要问题 - 但是稳健性)
答案 0 :(得分:47)
非递归:
new DirectoryInfo(path).GetDirectories()
.OrderByDescending(d=>d.LastWriteTimeUtc).First();
递归:
new DirectoryInfo(path).GetDirectories("*",
SearchOption.AllDirectories).OrderByDescending(d=>d.LastWriteTimeUtc).First();
答案 1 :(得分:14)
不使用LINQ
DateTime lastHigh = new DateTime(1900,1,1);
string highDir;
foreach (string subdir in Directory.GetDirectories(path)){
DirectoryInfo fi1 = new DirectoryInfo(subdir);
DateTime created = fi1.LastWriteTime;
if (created > lastHigh){
highDir = subdir;
lastHigh = created;
}
}
答案 2 :(得分:3)
警告:您可能需要在目录信息对象上调用Refresh()
以获取正确的信息:
e.g。在Laramie的回答中,你要编辑:
DirectoryInfo fi1 = new DirectoryInfo(subdir);
fi1.Refresh();
DateTime created = fi1.LastWriteTime;
否则你可能会像我一样得到过时的信息:
“在尝试获取属性之前,必须调用Refresh 信息,或信息将过时。“
http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.refresh(v=vs.71).aspx
答案 3 :(得分:2)
试试这个:
string pattern = "*.txt"
var dirInfo = new DirectoryInfo(directory);
var file = (from f in dirInfo.GetFiles(pattern)
orderby f.LastWriteTime descending
select f).First();
http://zamirsblog.blogspot.com/2012/07/c-find-most-recent-file-in-directory.html
答案 4 :(得分:1)
您可以使用Directory.GetLastWriteTime(或Directory.GetLastWriteTimeUtc
,在这种情况下,当您进行相对比较时,这并不重要。)
虽然你只是想查看操作系统报告的“修改”时间,或者你想找到最近修改过的文件里面的目录吗?它们并不总是匹配(也就是说,OS修改文件时并不总是更新包含目录“上次修改”的时间)。
答案 5 :(得分:0)
如果您正在构建Windows服务,并且希望在创建新文件或目录时收到通知,则还可以使用FileSystemWatcher。不可否认,这并不容易,但有趣。 :)