如何从目录中获取最新文件

时间:2010-12-09 07:09:13

标签: c++ windows logfiles

这特定于创建日志文件。当我使用我的应用程序连接到服务器时,它会将详细信息写入日志文件。当日志文件达到特定大小时,假设为1MB,那么我创建另一个名为LOG2.log的文件。

现在回写日志文件时,有两个甚至更多的日志文件,我想拿起最新的日志文件。我不想遍历该目录中的所有文件并获取文件,因为这将花费处理时间,是否有其他方法可以在目录中获取最后创建的文件或日志文件。

5 个答案:

答案 0 :(得分:3)

最好的办法是轮换日志文件,这通常是在Unix中完成的(通常是通过cron。)

一种可能的实现是保留10个(或多个)旧日志文件,如果您的程序检测到Log.log超过1MB,则将Log09.log移动到Log10.log,将Log08.log移动到Log09.log,7到8,6到7,... 2到3,然后Log.log到Log02.log。最后,创建一个新的Log.log文件并继续录制。

通过这种方式,您将始终写入Log.log,并且没有文件系统的谜团。从理论上讲,这种方法可以扩展到荒谬的日志文件数量(超出您的合理需要),并且比写入Log3023.log更标准。另外,人们总是知道在哪里可以找到当前的日志。

答案 1 :(得分:1)

我相信答案是“僵硬的”。你必须自己迭代并找到最新的一个,因为操作系统不会为每个可能的排序顺序保留索引,而不是有人可能需要它们。

答案 2 :(得分:0)

您是否可以修改服务器?如果是这样,可能会引入一个LASTLOG.log文件,该文件包含最新日志文件的名称或其实际内容。

否则,托尼是对的..没有真正的方法可以做到这一点,而不是自己进行迭代。

答案 3 :(得分:0)

优雅怎么样:

ls -t | head -n 1

答案 4 :(得分:0)

最有效的方法是使用专门的函数遍历所有条目(因为NTFS或FAT不按时间索引),但忽略您不需要的内容。为此,请使用信息级别FindFirstFileEx致电FindExInfoBasic。这会跳过8.3名称解析。