是否可以在另一个应用程序更新文件时打开文本文件并读取内容,这样就不会导致锁定冲突?

我需要监视一个应用程序的日志文件,每次发生事件时该日志文件都会由另一个应用程序更新。

在尝试读取文件之前,我会检查该文件是否正在使用,但这似乎并不在所有情况下都有效。

谢谢,彼得

有帮助吗?

解决方案

这取决于第一应用如何打开该文件

即调用CreateFile API,打开文件时,存在dwShareMode PARAM它告诉API如何将其打开(如果这被赋予0,它不能被从其他应用程序访问IIRC)。 否则就应该与从文件中读取没有问题。 如果我不是搞错了,要检查该文件是否被打开只能读取U可以调用 类似

CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) ;

其他提示

  1. 从 Sysinternals 下载进程监视器。
  2. 打开过滤器对话框并为日志文件添加“路径”过滤器。
  3. 启动日志写入应用程序(我将其称为“日志编写器”)。
  4. 查找并单击 logwriter 执行 CreateFile 的事件。
  5. 在“详细信息”下,应具有“所需访问权限:通用写入”。它应该有“共享模式:读”,对应于 FILE_SHARE_READ 在对 CreateFile 的调用中。它的意思是,“我,日志作者,允许其他人 我的文件”。
  6. 现在运行日志读取应用程序(“logreader”),并进行相同的练习。
  7. 详细信息应具有“所需访问权限:通用读物”。它应该有“共享模式:Read, Write”,意思是“我,日志读取者,允许其他人,包括日志写入者,读取和写入日志文件”。

我认为这些是最明智的值,它们将防止锁定。其他组合也是允许的。那里 这里有一张桌子.

现在,您还没有说当它“似乎并非在所有情况下都有效”时会发生什么。接下来做什么实际上取决于细节。希望以上内容能为您提供足够的信息来找出问题所在。

因为写程序是不太可能已锁定该文件,你不会得到一个锁定冲突。做你一般建议什么工作没有问题(这是什么UNIX的尾-f 命令一样)时有发生,这些小故障,可以忽略不计。我已经写了一对情侣在德过去那种像这样工作日志监控应用程序,没有任何问题。

请尝试使用 FileSystemWatcher的以获取事件时一个文件被更新。

一个更友好的Delphi 链接

这让文件共享工作这可能是不可能取决于其他程序请求权是什么且不说,有些程序会关闭访问的文件。

我曾在过去的成功与我的程序等待文件变得可用,然后迅速打开它,抓住了所需的数据,并关闭它。至少在DOS下访问锁定文件的尝试引起了重试几次,我撞到了这个设定,所以如果其他程序试图为文件,而我是有他们仅仅是被推迟,再也看不到一个错误。

我甚至更新文件(我确信的不是的关闭它之间!),而其他程序不用知道任何事情。

其丑无比,但我们无法改变其他程序,因此是完成任务的唯一方法。它被部署在内部多年,我从来没有听说过一个窥视从该系统的用户。它终于走了当其它程序所控制的机械退役。

XpoLog会做的伎俩不改变你的ENV或代码,XpoLog日志监控

阿瓦尔是正确的 - 你在这里写程序的摆布。如果他们被锁定的文件,然后有几件事情可以做:

1 - 检查在“最后修改”日期时间变化 - 如果改变,那么你知道的的东西的发生

2 - 如果国防部日期时间的确发生了变化,那么(根据文件的大小),它可能是不够好,创建该文件的副本,并检查

我们使用 “尾为Win32”,

我知道它不Delphi的,但它可能是有用的

http://tailforwin32.sourceforge.net/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top