我想监视 Windows 计算机上的纯文本文件以了解其更改。每当外部应用程序更新文件时,我的附加组件都应该读取它并采取相应的行动。
浏览了大量文档后,我找不到在 Firefox 中执行此操作的直接工具。所以我想出了以下方法。
请提出建议。
方法 1 -
在 while 循环中{
a) 列出被监控目录中的所有文件/使用 nsIFile.exists()
b) 如果文件确实存在,则进入下一步,否则进入休眠
c) 使用“nsIFile”接口(interface)并获取文件的属性“lastModifiedTime”并将其与最初存储的值进行比较
d) sleep 1 秒。
}
我打算使用 NetUtil.asyncFetch() 来读取此文件。
障碍是 a) 绕过安全性 b) 在主线程中调用时性能受到影响。
虽然这实际上不是异步的..我可以在“ChromeWorker”线程中将其称为 .js
尝试了上述方法..
但我无法休眠..似乎无法休眠..setTimeOut() 没有帮助我
方法 2 -
有点牵强,不确定这是否有效:)
如果文件存在,则将“nsIFile”打开为“nsIInputStreamPump”
最佳答案
没有内置 API 可以获取有关文件更改的通知。但是,您可以使用 js-ctypes直接调用操作系统函数。因此,在 Windows 上,您将创建一个 ChromeWorker
并调用 FindFirstChangeNotification
function那里。然后,您可以使用包含以下调用的循环:
-
WaitForSingleObject
- 等待您正在观看的目录发生变化。 - 如有必要,向主线程发送更改通知。
-
FindNextChangeNotification
您应该调用FindCloseChangeNotification
一旦你看完了。
关于firefox - 如何在 Firefox 中异步监控文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495227/