我对C#的FileSystemWatcher有一些疑问。
以下是我的代码。
File created: book.txt
File changed: book.txt
当我将book.txt放到目录中时,这是我的结果。
File created: book.txt
但这不是我预期的结果。我希望它只是触发创建的事件。
IF OBJECT_ID('tempdb..#temp850') IS NOT NULL DROP TABLE #temp850
GO
SELECT 1 col1 INTO #temp850
如何改进我的代码。我无法删除已更改的事件,我已使用其他案例。
答案 0 :(得分:0)
Changed事件说:
当更改,系统属性,上次写入时间,上次访问时间或文件或目录的安全权限时,会引发Changed事件被监控的目录。
您监控文件夹,并通过向其添加新文件来更改其大小,以便您通过事件得到通知。
很自然地,当您在文件系统上来回移动文件时,您可能会得到一系列不同的事件。您只需要阅读从事件中获得的属性并采取相应的行动。
答案 1 :(得分:0)
我刚才遇到了这个问题,并且该页面是最早的搜索结果之一-我知道这是一个比较老的问题,但是由于没有一个确定的答案,因此我会冒昧地添加我的解决方案。 我看到的特定行为是在创建文件时,FileSystemWatcher触发了 Change 和 Create 事件。
例如如果从命令提示符下键入:
echo test >foobar.txt
..然后我的FSW触发了foobar.txt的 Change ,然后是文件的 Creation 。正如上面的Tigran所解释的那样,虽然技术上是正确的,但我实际上只对向用户呈现Create事件感兴趣。
我的解决方案微不足道。我创建了一个布尔标志来指示FSW事件处理程序是否已触发,并在发生Create事件时将其设置为TRUE。我将Change事件处理程序修改为仅在标志设置为false时才采取措施。 换句话说,每个周期仅处理一个事件(在我的情况下,当用户单击按钮以确认该事件时,该标志将重置),并且创建事件具有优先级。
我希望这可以帮助遇到同样挑战的其他人。