目前我的应用程序使用string [] subdirs = Directory.GetDirectories(path)来获取子目录的列表,现在我想提取最新的路径最后修改)子目录。如何获取最新(最后修改)的目录[C#]
完成此操作的最简单方法是什么? (效率不是主要问题 - 但鲁棒性是)
目前我的应用程序使用string [] subdirs = Directory.GetDirectories(path)来获取子目录的列表,现在我想提取最新的路径最后修改)子目录。如何获取最新(最后修改)的目录[C#]
完成此操作的最简单方法是什么? (效率不是主要问题 - 但鲁棒性是)
不使用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;
}
}
您可以使用Directory.GetLastWriteTime(或Directory.GetLastWriteTimeUtc
,在这种情况下,当您仅进行相对比较时,这并不重要)。
虽然你只是想看看操作系统报告的“修改”时间,或者你是否想找到最近修改过的文件里面的目录呢?它们并不总是匹配的(也就是说,操作系统并不总是在修改文件时更新包含“上次修改时间”的目录)。
最近的文件夹(文件内幕无关紧要) – Shaitan00 2010-05-31 04:11:37
在这种情况下,'Directory.GetLastWriteTime'就是你所追求的。 Laramie的解决方案也行得通,正如我刚刚所说的那样(他只是非常友好地为您编写代码;) – 2010-05-31 04:30:54
非递归:
new DirectoryInfo(path).GetDirectories()
.OrderByDescending(d=>d.LastWriteTimeUtc).First();
递归:
new DirectoryInfo(path).GetDirectories("*",
SearchOption.AllDirectories).OrderByDescending(d=>d.LastWriteTimeUtc).First();
如果你正在建设一个窗口服务,你想,当一个新的通知文件或目录已创建,您也可以使用FileSystemWatcher。诚然,并不容易,但玩起来很有趣。 :)
-1这只适用于在应用程序运行时创建目录,但这不一定是真实的根据问题中提供的信息。 – 2010-05-31 04:17:21
这正是我指定Windows服务的原因,意味着它将一直在运行。 – 2010-05-31 04:20:11
这不一定是真的。可以启动和停止服务,或间歇性运行(我认为这是一个糟糕的设计,但这是一个单独的问题)。例如,如果在安装应用程序之前创建文件夹,则此方法不会通知应用程序。 – 2010-05-31 04:23:55
被警告:您可能需要调用Refresh()
您的目录信息对象,以获得正确的信息:
例如在拉勒米的回答你编辑到:
DirectoryInfo fi1 = new DirectoryInfo(subdir);
fi1.Refresh();
DateTime created = fi1.LastWriteTime;
否则,你可能会得到过时的信息和我一样:
“呼吁必须进行刷新尝试获取属性 信息之前,或信息会过时。“
http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.refresh(v=vs.71).aspx
试试这个:
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
它应该是递归(所有后代)? – 2010-05-31 04:13:52