algorithm - 获取动态变化的日志文件

标签 algorithm computer-science

我面临的问题是否有某种奇特的名称,如“哲学家用餐问题”或“约瑟夫问题”等?这样我就可以对其进行一些研究。

我想在 Windows 中检索最新的日志文件。当日志文件已满(假设为 50MB)时,日志文件将更名为 log.2、log.3、log.4 ......等等,传入的日志将插入到 log.1 中。

现在,我有办法解决这个问题。如果最新文件 (log.1) 有任何更改,我会尝试间歇性地轮询服务器。 但是,我很快发现 log.1 在不可预测的时间更改为 log.2,导致我错过了日志文件(因为如果 log.1 在其“修改日期”中有任何更改,我只会检索 log.1 "属性)。

我希望我可以给出某种寓言来使这易于理解。我能想到的最接近的事情是,频闪仪以未知频率卡住风扇,给人一种风扇正在卡住的错觉,但实际上风扇已经旋转了很多时间。您明白了要点。

提前致谢。

最佳答案

解决方案是让您的程序跟踪文件 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举了一个不错的例子。

关于algorithm - 获取动态变化的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23470395/

相关文章:

artificial-intelligence - 15 个拼图的不相交模式数据库

c - 更好的链表编程实践

math - 相同的方程但不同的答案

algorithm - 二元提升|行星查询 1 | TLE

binary - 二进制补码,为什么命名为 “two”

algorithm - 先验算法

algorithm - 测试一个数字是否是斐波那契

Python EAN-13 条码生成器脚本溢出

algorithm - 在 O(1) 中构建二叉树?

python - 这些数据包使用什么校验和算法?