我想在Windows机器上监视纯文本文件以进行更改。每当外部应用程序更新文件时,我的附加组件都应该读取它并采取相应的行动。
通过相当多的文档,我无法在Firefox中找到直接的工具。所以我提出了以下方法。
请建议。
方法1 -
在一个while循环中{
a)列出被监视目录中的所有文件/使用nsIFile.exists()
b)如果文件确实存在,请转到下一步,进入睡眠状态
c)使用“nsIFile”接口并获得文件&的属性“lastModifiedTime”。将其与最初存储的值进行比较
d)睡1秒钟
}
我打算使用NetUtil.asyncFetch()来读取这个文件。
路障是a)绕过安全b)在主线程中调用时的性能命中。
虽然这在实际意义上并非异步。我可以在“ChromeWorker”主题中将其称为.js
尝试上述方法..
但我无法入睡..似乎没有办法入睡.. setTimeOut()没有帮助我
方法2 -
有点牵强,不知道这是否会起作用:)
如果文件存在,则将“nsIFile”打开为“nsIInputStreamPump”
答案 0 :(得分:4)
没有内置API可以获得有关文件更改的通知。但是,您可以使用js-ctypes直接调用OS函数。因此,在Windows上,您可以创建ChromeWorker
并在那里调用FindFirstChangeNotification
function。然后,您将使用具有以下调用的循环:
WaitForSingleObject
- 等待您正在观看的目录中更改内容。FindNextChangeNotification
一旦你完成了观看,你应该致电FindCloseChangeNotification
。
答案 1 :(得分:0)
我可能错了,但我相当肯定如果没有某种轮询方法就无法做到这一点(即:在某个时间间隔或在您即将使用之前检查文件)。