检测何时将新文件添加到目录

时间:2014-10-22 11:48:48

标签: file directory erlang gen-server

如何检测添加到特定目录的新文件?

我正在寻找的东西类似于创建新文件时的event_listener。我对使用循环不断搜索目录中的新文件感兴趣,因为我需要将文件名添加到目录中。

3 个答案:

答案 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 inotifyone 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