我有以下子项:
Private Sub Watcher_Changed(ByVal sender As System.Object, ByVal e As FileSystemEventArgs)
If Path.GetExtension(e.Name) = ".p2p" Then
Exit Sub
Else
Try
' multiple change events can be thrown. Check that file hasn't already been moved.
While Not File.Exists(e.FullPath)
Exit Try
End While
' throw further processing to a BackGroundWorker
ChangedFullPath = e.FullPath
ChangedFileName = e.Name
FileMover = New BackgroundWorker
AddHandler FileMover.DoWork, New DoWorkEventHandler(AddressOf ProcessFile)
FileMover.RunWorkerAsync()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub
当FTP上传文件时,我仍然收到多个更改文件通知。
我想修改Try,所以它也会抛出更改通知,如果它发生在过去(时间) - 让我们说3秒。它应该是微不足道的,但由于某种原因它今天不会出现在我身上,而我的思绪并没有围绕我在谷歌上找到的答案。
谢谢, 斯科特
答案 0 :(得分:10)
我创建了一个服务来上传几年前转储到FTP文件夹的文件,这里有一些我应该帮你解决问题的事情:
这似乎对我有用,并且该服务可靠地上传文件数月,直到我离开那份工作。
答案 1 :(得分:3)
答案 2 :(得分:3)
我之前遇到过这种情况,并最终实现了一个定时器机制来等待文件“稳定”,或者写入事件停止进入x时间。
有点笨拙,但确实有效。
答案 3 :(得分:2)
需要注意的一点是,访问文件可以更改其中一个文件属性,例如“访问时间”等。如果您没有正确设置通知过滤器,则可以触发另一个事件。
答案 4 :(得分:1)
我有同样的问题,我保存了一个通过代码上传的文件,删除和创建每次都会触发两次。在进行处理之前,我必须检查文件是否在那里。
private void fsw_Created(object sender, FileSystemEventArgs e)
{
if (File.Exists(e.FullPath))
{
//process the file here
}
}
答案 5 :(得分:0)
我尝试在更改时自动重新加载配置文件时遇到了同样的问题。我最终计算了文件的MD5哈希,以确定文件是否实际已更改,并且只有在哈希值不同时才重新加载。这是我可以过滤掉重复的唯一确定方式。
我简单地想过使用一个计时器机制来过滤掉变更通知但感觉就像pete-m一样,但我觉得它太不干净了。
我尝试仅观看LastWrite时间更改,但这不起作用。我还在收到重复的通知。
答案 6 :(得分:0)
我正在尝试检测excel文件何时发生更改,但遇到了一个问题,即更改后的事件无法触发,并且因为我只关注单个文件设置,因此过滤器无法正常工作。当我删除过滤器并查看触发的事件时,事件参数名称属性看起来是随机生成的名称,而不是我知道已更改的特定文件名。
因此,当特定的excel文件更改时,我无法收到简单的通知。