如何获取最新(最后修改)的目录[C#]

时间:2010-05-31 04:02:47

标签: c# directory

目前我的应用程序使用string [] subdirs = Directory.GetDirectories(path)来获取子目录列表,现在我想提取列表中最新(最后修改过的)子目录的路径。

实现这一目标的最简单方法是什么? (效率不是主要问题 - 但是稳健性)

6 个答案:

答案 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。不可否认,这并不容易,但有趣。 :)