如何在Firefox中异步监控文件?

时间:2012-07-15 20:10:18

标签: firefox firefox-addon xpcom

我想在Windows机器上监视纯文本文件以进行更改。每当外部应用程序更新文件时,我的附加组件都应该读取它并采取相应的行动。

通过相当多的文档,我无法在Firefox中找到直接的工具。所以我提出了以下方法。

请建议。

方法1 - 在一个while循环中{
  a)列出被监视目录中的所有文件/使用nsIFile.exists()
  b)如果文件确实存在,请转到下一步,进入睡眠状态   c)使用“nsIFile”接口并获得文件&的属性“lastModifiedTime”。将其与最初存储的值进行比较   d)睡1秒钟 }
我打算使用NetUtil.asyncFetch()来读取这个文件。 路障是a)绕过安全b)在主线程中调用时的性能命中。
虽然这在实际意义上并非异步。我可以在“ChromeWorker”主题中将其称为.js

尝试上述方法..
但我无法入睡..似乎没有办法入睡.. setTimeOut()没有帮助我

方法2 -
有点牵强,不知道这是否会起作用:) 如果文件存在,则将“nsIFile”打开为“nsIInputStreamPump”

2 个答案:

答案 0 :(得分:4)

没有内置API可以获得有关文件更改的通知。但是,您可以使用js-ctypes直接调用OS函数。因此,在Windows上,您可以创建ChromeWorker并在那里调用FindFirstChangeNotification function。然后,您将使用具有以下调用的循环:

一旦你完成了观看,你应该致电FindCloseChangeNotification

答案 1 :(得分:0)

我可能错了,但我相当肯定如果没有某种轮询方法就无法做到这一点(即:在某个时间间隔或在您即将使用之前检查文件)。