2014-10-22 76 views
0

如何檢測添加到特定目錄的新文件?將新文件添加到目錄時檢測

我在找什麼就像創建一個新文件時的event_listener。我對使用循環不感興趣,因爲在將文件添加到目錄時,需要使用該文件的名稱,因此我一直在搜索目錄中搜索新文件。

回答

0

如果你正在使用Unix操作系統,你應該考慮使用inotifywait工具。 我才發現周圍有用的系統工具很好二郎包裝:https://github.com/sdanzan/erlang-systools

+0

這似乎是使用一個循環也和我期待的東西等的觸發 – 2014-10-22 12:37:10

+0

這是有效的觸發基於後做touch /tmp/foo.txt循環。通過使用此工具,您正在訂閱文件系統以進行特定更改並獲得通知。沒關係。閱讀有關:[link1](http://www.infoq.com/articles/inotify-linux-file-system-event-monitoring)[link2](http://blog.lagentz.com/general/automate-你的shell腳本使用inotify-and-inotifywait /) – 2014-10-22 12:54:35

+0

得到它,謝謝。 – 2014-10-22 16:00:48

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

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"} 

在這裏我開始了手表

相關問題