2014-10-22 5 views
0

Как я могу обнаружить новый файл, добавляемый в конкретный каталог?Обнаруживать, когда новый файл добавляется в каталог

Что я ищу, это нечто вроде event_listener, когда создается новый файл. Я не заинтересован в использовании цикла, который продолжает поиск в каталоге для новых файлов, потому что мне нужно имя файла, когда оно добавлено в каталог.

ответ

0

В случае, если вы работаете с Unix как OS, вам следует использовать инструмент inotifywait. Я просто нашел хороший Erlang обертку полезных инструментов системы: https://github.com/sdanzan/erlang-systools

+0

это, кажется, использует цикл тоже, и я ищу что-то вроде триггера –

+0

Это эффективно инициируют на основе петля. Используя этот инструмент, вы подписываетесь на файловую систему для определенных изменений и получаете уведомление. Все нормально. Читайте об этом: [link1] (http://www.infoq.com/articles/inotify-linux-file-system-event-monitoring) [link2] (http://blog.lagentz.com/general/automate- ваш-shell-scripts-using-inotify-and-inotifywait /) –

+0

получил его, спасибо. –

1

К сожалению, нет никакой родной Erlang API выполнять то, что вы ищете.

Любое решение без опроса должно основываться на конкретных API-интерфейсах операционной системы. В MacOS X и FreeBSD вы можете использовать API kqueue(2). В Linux вы можете использовать API inotify(7). Оба API работают с select(2), и вы можете использовать функцию Erlang driver_select, чтобы выбрать в файловых дескрипторах, предоставляемых этими API. Написание такого драйвера не является чрезвычайно сложным.

Вы можете найти на Github several drivers for inotify и one driver for kqueue.

0

inoteefy дает вам приятный слушатель на основе api поверх Linux inotify 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 после запуска часов

Смежные вопросы