繁体   English   中英

FileSystemWatcher - 文件复制期间的3个事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM