2017-03-21 61 views
0

我正在尝试执行基于synrc/fs library检测到的文件夹更改的操作。我希望在每次由fs &捕获的更改执行操作时收到此通知。打印更改的文件名。倾听进程Erlang

我在下面的代码尝试,但只执行第一次!

say_hello() -> 
    fs:start_link(fs_watcher, "/Users/foldername"), 
    fs:subscribe(fs_watcher), 
    receive 
     {Watcher_process, {Fs, File_event}, {ChangedFile, Type}} -> 
      io:format("~p was ~p ~n",[ChangedFile,File_event]) 
    end. 

任何有益的帮助与链接&描述,如果可能沿着感谢!谢谢:)

+0

@Dogbert你们俩给我有点儿类似的答案!非常感谢! :)我已upvoted你的答案!但是,m选择的答案(你们都回答准确的时间):| –

+0

@AsierAzkuenaga你们都给了我一个类似的答案!非常感谢! :)我已upvoted你的答案!但是,m选择的答案(你们都回答准确的时间):| –

回答

2

如果你想要的功能继续接收相同类型的消息,你可以使用递归:

say_hello() -> 
    fs:start_link(fs_watcher, "/Users/foldername"), 
    fs:subscribe(fs_watcher), 
    recur(). 

recur()-> 
    receive 
    {Watcher_process, {Fs, File_event}, {ChangedFile, Type}} -> 
     io:format("~p was ~p ~n",[ChangedFile,File_event]), 
     recur() 
    end. 

你将不得不再想办法来完成的功能。

+0

谢谢@Asier! :) –

2

你需要递归调用receive

say_hello() -> 
    fs:start_link(fs_watcher, "/Users/foldername"), 
    fs:subscribe(fs_watcher), 
    loop(). 

loop() -> 
    receive 
     {Watcher_process, {Fs, File_event}, {ChangedFile, Type}} -> 
      io:format("~p was ~p ~n",[ChangedFile,File_event]), 
      loop() 
    end. 
+0

谢谢,@Dogbert! :) –