2017-03-21 62 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! :) –