查找文件夹最新修改时间的最佳方法是什么?

时间:2008-12-29 15:22:16

标签: c# vb.net .net directoryinfo

我有一个包含文件子文件夹的文件夹。我想通过修改时间获取最新的文件名。有没有一种更有效的方法来找到每个文件夹和文件的循环以找到它?

6 个答案:

答案 0 :(得分:3)

取决于你想要怎么做。你想要软件启动然后查找它还是继续运行并跟踪它?

在最后一种情况下,可以使用FileSystemWatcher类。

答案 1 :(得分:2)

使用FileSystemWatcher对象。

Dim folderToWatch As New FileSystemWatcher
folderToWatch.Path = "C:\FoldertoWatch\"
AddHandler folderToWatch.Created, AddressOf folderToWatch_Created
folderToWatch.EnableRaisingEvents = True
folderToWatch.IncludeSubdirectories = True
Console.ReadLine()

然后,只需创建一个处理程序(此处称为folderToWatch_Created)并执行以下操作:

Console.WriteLine("File {0} was just created.", e.Name)

答案 2 :(得分:1)

使用FileSystemWatcher将起作用,假设您只需在加载应用程序后知道此信息。否则你仍然需要循环。这样的东西可以工作(并且不使用递归):

Stack<DirectoryInfo> dirs = new Stack<DirectoryInfo>();
FileInfo mostRecent = null;

dirs.Push(new DirectoryInfo("C:\\TEMP"));

while (dirs.Count > 0) {
    DirectoryInfo current = dirs.Pop();

    Array.ForEach(current.GetFiles(), delegate(FileInfo f)
    {
        if (mostRecent == null || mostRecent.LastWriteTime < f.LastWriteTime)
            mostRecent = f;
    });

    Array.ForEach(current.GetDirectories(), delegate(DirectoryInfo d)
    {
        dirs.Push(d);
    });
}

Console.Write("Most recent: {0}", mostRecent.FullName);

答案 3 :(得分:1)

如果你喜欢Linq,你可以使用linq来反对以你想要的方式查询你的文件系统。给出一个样本here,您可以在4行代码中玩游戏并获得您想要的内容。确保您的应用对文件夹具有适当的访问权限。

答案 4 :(得分:0)

如果安装了PowerShell,则命令为

dir -r | select Name, LastWriteTime | sort LastWriteTime -DESC | select -first 1

这样,脚本可以根据需要运行,您可以将Name(或完整路径)传递回系统进行处理。

答案 5 :(得分:0)

void Main()
{
    string startDirectory = @"c:\temp";
    var dir = new DirectoryInfo(startDirectory);

    FileInfo mostRecentlyEditedFile =
        (from file in dir.GetFiles("*.*", SearchOption.AllDirectories)
         orderby file.LastWriteTime descending
         select file).ToList().First();

    Console.Write(@"{0}\{1}", 
        mostRecentlyEditedFile.DirectoryName, 
        mostRecentlyEditedFile.Name);
}