2

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

浏览了相当多的文档,我找不到在 Firefox 中执行此操作的直接工具。所以我想出了以下方法。

请建议。

方法 1 - 在 while 循环中 {
a) 列出正在监视的目录中的所有文件/使用 nsIFile.exists()
b) 如果文件确实存在,则转到下一步,否则进入睡眠
c) 使用“nsIFile”接口并获取文件的属性“lastModifiedTime”并将其与最初存储的值进行比较
d) 休眠 1 秒。 我打算使用 NetUtil.asyncFetch() 来读取这个文件

障碍是 a) 绕过安全 b) 在主线程中调用时性能下降。
虽然这不是真正意义上的异步..我可以在“ChromeWorker”线程中将其称为.js

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

方法 2 -有点
牵强,不确定这是否可行:)
如果文件存在,则将“nsIFile”打开为“nsIInputStreamPump”

4

2 回答 2

4

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

FindCloseChangeNotification一旦你看完了,你应该打电话。

于 2012-07-16T06:35:14.510 回答
0

I may be wrong, but I'm fairly certain this can't be done without some sort of polling approach (ie: check the file over some interval or just before you are about to use it).

于 2012-07-15T21:25:09.540 回答