实时监视文件更改

问题描述 投票:17回答:5

我有一个程序,监视某些文件的更改。文件更新后,即会对其进行处理。到目前为止,我已经提出了在R中处理“实时分析”的一般方法。我希望你们还有其他方法。也许我们可以讨论它们的优缺点。

monitor <- TRUE
start.state <- file.info$mtime # modification time of the file when initiating

while(monitor) {
  change.state <- file.info$mtime
  if(start.state < change.state) {
    #process
  } else {
    print("Nothing new.")
  }
  Sys.sleep(sleep.time)
}
r monitoring real-time
5个回答
7
投票

类似于使用系统API的建议,也可以使用qtbase来完成,这将是R中的跨平台方法:

dir_to_watch <- "/tmp"

library(qtbase)
fsw <- Qt$QFileSystemWatcher()
fsw$addPath(dir_to_watch)

id <- qconnect(fsw, "directoryChanged", function(path) {
  message(sprintf("directory %s has changed", path))
})

cat("abc", file="/tmp/deleteme.txt")

6
投票

如果您的系统提供了用于监视文件系统更改的API,则应使用该API。我相信Mac会附带这个。但是不确定其他平台。

编辑:快速搜索给了我:

Linux-http://wiki.linuxquestions.org/wiki/FAM

Win32-http://msdn.microsoft.com/en-us/library/aa364417(VS.85).aspx

显然,这些API将消除您所需的任何轮询。另一方面,它们可能并不总是可用。

Java具有此:http://jnotify.sourceforge.net/http://java.sun.com/developer/technicalArticles/javase/nio/#6


6
投票

我有一个主意:您可以设置CRON作业/计划任务以每n秒(或任何其他时间)运行R脚本。 R脚本检查文件哈希,如果哈希不匹配,则运行分析。您可以使用digest::digest功能,只需查看手册即可。


3
投票

如果您要监视的文件很多,那么R可能太慢了。转到您的c:/目录,查看执行file.info(dir(recursive = TRUE))需要多长时间。使用dos或bash脚本可能会更快。

否则,代码看起来不错。


3
投票

您可以使用tcltk2软件包中的tclTask​​Schedule函数来设置一个检查更新并运行代码的函数。然后,它将定期运行(您设置时间),但仍然允许您使用R会话。

© www.soinside.com 2019 - 2024. All rights reserved.