[英]FileSystemWatcher - 3 events during File copy
就是这样,每次FileSystemWatcher将文件复制到FileWatcher文件夹时都会生成3个事件
示例:使用File.Copy(source,watcherFolder,将文件复制到FileWatcher文件夹)时, 创建 - >已更改 - >已更改 (在新文件期间)或已更改 - >已更改 - >已更改 (在覆盖现有文件期间)事件真正)。
复制不同大小的文件(1kb,67kb,100MB,500MB,1GB文件)时会收到3个事件。 我已经在FileSystemWatcher中注册了Created和Changed事件
如果您的问题是关于您收到的多个事件,这是正常行为。 文件复制可以引发多个事件。
您可以检查FileSystemEventArgs.ChangeType中的更改并忽略某些事件。 这是WatcherChangeTypes枚举 。
看一下FileSystemWatcher备注。
关于Created事件,它将在目标文件夹中引发。
例如,您创建两个FileSystemWatcher实例。 FileSystemWatcher1设置为观看“C:\\ My Documents”,FileSystemWatcher2设置为观看“C:\\ Your Documents”。 如果将文件从“我的文档”复制到“您的文档”中,FileSystemWatcher2将引发Created事件,但不会为FileSystemWatcher1引发任何事件。 与复制不同,移动文件或目录会引发两个事件。 在上一个示例中,如果您将文件从“我的文档”移动到“您的文档”,则FileSystemWatcher2将引发Created事件,FileSystemWatcher1将引发Deleted事件。
如评论中所述,您应该查找正在创建的文件,然后尝试文件锁定以确定它是否已完全复制。
while ($true)
{
try{
[IO.file]::openwrite("<insert file path>").close()
break
}
catch { start-sleep -Seconds 60 }
}
如果您控制文件复制操作,一件简单的事情就是使用临时名称创建文件,并在复制后重命名该文件。 让FileSystemWatcher
监视Rename
事件。 此事件仅触发一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.