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

C++ 如何从目录中获取最新文件,c++,windows,logfiles,C++,Windows,Logfiles,这是特定于创建日志文件的。当我使用应用程序连接到服务器时,它会将详细信息写入日志文件。当日志文件达到特定大小(比如1MB)时,我会创建另一个名为LOG2.log的文件 现在,当写回日志文件时,有两个甚至更多的日志文件,我想选择最新的一个。我不想遍历该目录中的所有文件并提取该文件,因为这需要处理时间。是否有其他方法获取该目录中最后创建的文件或日志文件。我相信答案是“僵硬”。你必须自己迭代并找到最近的一个,因为操作系统不会为每个可能的排序顺序保留索引,以免有人需要它们。你能修改服务器吗?如果是这样,

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


现在,当写回日志文件时,有两个甚至更多的日志文件,我想选择最新的一个。我不想遍历该目录中的所有文件并提取该文件,因为这需要处理时间。是否有其他方法获取该目录中最后创建的文件或日志文件。

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

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


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

优雅的:

ls -t | head -n 1

最好的办法是轮换日志文件,这是在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更标准。另外,人们总是知道在哪里可以找到当前日志。

最有效的方法是使用专门的函数遍历所有条目(因为NTFS或FAT不按时间索引),但忽略不需要的内容。为此,请使用信息级别
FindExInfoBasic
调用
FindFirstFileEx
。跳过8.3个名字解析。< /p>对于一个标记为C++和Windows的问题…听起来像是治疗各种疾病的良药…:-)