我面临的问题是否有某种奇特的名字,例如"餐饮哲学家问题"或"约瑟夫斯问题"等等?这是我可以对它做一些研究。
我想在Windows中检索最新的日志文件。日志文件将其名称更改为log.2,log.3,log.4 .....等等,当它已满(50MB让我们说)并且传入的日志将插入日志中。 1。
现在,我有一个解决方案。如果最新文件(log.1)有任何更改,我会尝试间歇性地轮询服务器。 但是,我很快发现log.1在不可预测的时间内更改为log.2,导致我错过了日志文件(因为如果log.1在其'&中有任何更改,我将只检索log.1 #34;修改日期"属性)。
我希望我能给出一些易于理解的寓言。最接近我能说的是频闪仪以一个未知频率冷冻风扇,让风扇的幻觉变冷,但风扇实际上已经旋转了很多时间。你得到了要点。
提前致谢。
答案 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)
获取文件列表,按降序排序,获取第一个文件,读取日志行!