获取动态更改日志文件

时间:2014-05-05 10:35:57

标签: algorithm computer-science

我面临的问题是否有某种奇特的名字,例如"餐饮哲学家问题"或"约瑟夫斯问题"等等?这是我可以对它做一些研究。

我想在Windows中检索最新的日志文件。日志文件将其名称更改为log.2,log.3,log.4 .....等等,当它已满(50MB让我们说)并且传入的日志将插入日志中。 1。

现在,我有一个解决方案。如果最新文件(log.1)有任何更改,我会尝试间歇性地轮询服务器。 但是,我很快发现log.1在不可预测的时间内更改为log.2,导致我错过了日志文件(因为如果log.1在其'&中有任何更改,我将只检索log.1 #34;修改日期"属性)。

我希望我能给出一些易于理解的寓言。最接近我能说的是频闪仪以一个未知频率冷冻风扇,让风扇的幻觉变冷,但风扇实际上已经旋转了很多时间。你得到了要点。

提前致谢。

2 个答案:

答案 0 :(得分:3)

解决方案是让您的程序跟踪文件log.1和log.2的最后修改日期。轮询时,请检查log.2以获取更改,然后检查log.1是否有更改。

大多数情况下,log.2不会改变。如果是,则在那里读取更新的数据,然后在log.1中读取更新的数据。在代码中,它看起来像这样:

DateTime log1ModifiedDate  // saved, and updated whenever it changes
DateTime log2ModifiedDate

if log2.DateModified != log2ModifiedDate
    Read and process data from log.2
    update log2ModifiedDate
if log1.DateModified != log1ModifiedDate
    Read and process data from log.1
    update log1ModifiedDate

我假设您经常轮询log.1不会翻转两次,以至于以前是log.1的文件现在是log.3。如果您认为可能发生这种情况,则必须检查log.3以及log.2和log.1。

在Windows中处理此问题的另一种方法是实现文件更改通知,该通知会在文件更改目录时告诉您。这些通知以异步方式传递给您的程序。因此,您不是轮询,而是回复通知。在.NET中,您使用FileSystemWatcher。使用Windows API,您可以使用FindFirstChangeNotification及相关功能。 This CodeProject article给出了一个很好的例子。

答案 1 :(得分:0)

获取文件列表,按降序排序,获取第一个文件,读取日志行!