如何检测添加到特定目录的新文件?
我正在寻找的东西类似于创建新文件时的event_listener。我对使用循环不断搜索目录中的新文件感兴趣,因为我需要将文件名添加到目录中。
答案 0 :(得分:1)
很遗憾,没有原生的Erlang API 来执行您要查找的内容。
任何非轮询解决方案都必须依赖操作系统中的特定API。在MacOS X和FreeBSD上,您可以使用kqueue(2) API。在Linux上,您可以使用inotify(7) API。这两个API都与select(2)一起使用,您可以使用Erlang的driver_select函数来选择这些API提供的文件描述符。编写这样的驱动程序并不是非常困难。
您可以在Github上找到several drivers for inotify和one driver for kqueue。
答案 1 :(得分:0)
如果你在像OS这样的Unix上工作,你应该考虑使用inotifywait工具。 我刚刚找到了有用的系统工具的优秀Erlang包装器:https://github.com/sdanzan/erlang-systools
答案 2 :(得分:0)
inoteefy在Linux inotify
api之上为您提供了一个很好的基于监听器的api。收听/tmp/
更新的示例:
1> inoteefy:watch("/tmp/", fun(X) -> io:format("File event: ~p~n", [X]) end).
ok
File event: {"/tmp/",[create],0,"foo.txt"}
File event: {"/tmp/",[open],0,"foo.txt"}
File event: {"/tmp/",[attrib],0,"foo.txt"}
File event: {"/tmp/",[close_write],0,"foo.txt"}
这里我在开始观看后开始touch /tmp/foo.txt