我想查看文件更改目录(创建,编辑,重命名,删除),并在检测到更改时执行某些操作,例如调用函数。据我所知,FileSystemWatcher应该这样做。但是,文档页面上没有F#的示例代码,并且Web上的其他地方似乎也很少。
根据我的发现,以下至少是答案的一部分:
let fileSystemWatcher = new FileSystemWatcher()
fileSystemWatcher.Path <- @"C:\temp" // I'm actually using a variable here
fileSystemWatcher.NotifyFilter <- NotifyFilters.LastWrite
fileSystemWatcher.EnableRaisingEvents <- true
fileSystemWatcher.IncludeSubdirectories <- true
fileSystemWatcher.Changed.Add(fun _ -> printfn "changed")
fileSystemWatcher.Created.Add(fun _ -> printfn "created")
fileSystemWatcher.Deleted.Add(fun _ -> printfn "deleted")
fileSystemWatcher.Renamed.Add(fun _ -> printfn "renamed")
然而,实际上并没有做任何事情。 Some posts似乎有一个Async循环来响应事件,但是如果我使用那里的代码片段F#告诉我Async.AwaitObservable
未定义。
如果有人能够提供FileSystemWatcher正确用法的完整示例,我将不胜感激。
答案 0 :(得分:1)
在FSI工作正常。
删除NotifyFilter
位 - 您将覆盖默认设置(无论如何都包含LastWrite
),并且不会引发您关注的某些事件。 NotifyFilter
是一个过时的枚举标志样式字段,因此您可以像这样添加新值:
watcher.NotifyFilter <- watcher.NotifyFilter ||| NotifyFilters.LastWrite
您本身并不需要异步循环 - 在您链接到它的示例中,只是替换您已经使用的标准事件处理程序。但是如果你想使用Async.AwaitObservable
,请在nuget上查找FSharpx。