首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Copy-Item不适用于FileSystemWatcher

Copy-Item不适用于FileSystemWatcher
EN

Stack Overflow用户
提问于 2017-06-16 15:23:05
回答 1查看 432关注 0票数 0

我正在尝试在网络共享上创建一个监视文件夹,它只是将大小为300MB-20 in的文件复制到目标文件夹。FileSystemWatcher和subscription适用于小文件(即1-3kb)。但是,不会复制较大的文件。我确实看到在详细流中触发了复制,但没有文件被复制到目标文件夹。

代码语言:javascript
复制
 $Folder = "\\10.11.233.91\vol_tx01\delivered_media"
 $Filter = "*.mxf"
 $destination = "C:\Users\Leeds TX 11\Desktop\support\Testy"
 $Watcher = New-Object IO.FileSystemWatcher $Folder, $Filter -Property @{
     NotifyFilter = [IO.NotifyFilters]'Filename, LastAccess'
 }

 $onCreated = Register-ObjectEvent $Watcher Created -SourceIdentifier `
 FileCreated -Action {
     $path = $event.SourceEventArgs.FullPath
     $name = $event.SourceEventArgs.Name
     $ChangeType = $event.SourceEventargs.ChangeType
     $Timestamp = $event.TimeGenerated
     Write-Host "The file '$name' was $ChangeType at $Timestamp"
     Copy-Item $path -Destination $destination -Force -Recurse -Verbose
 }
EN

回答 1

Stack Overflow用户

发布于 2017-06-16 17:59:47

问题的组合就在手边。首先,感谢JohnLBevan指出应该使用LastWrite作为通知过滤器。我还发现,在这种情况下,copy-item并不等待源目录中的文件传输关闭。我通过在等待文件被锁定的while循环中修复了这个问题:

代码语言:javascript
复制
 ##################### DANGER BOX ####################################

    $Folder = "C:\Users\Leeds TX 12\Desktop\Source" #Source dir
    $Filter = "*.mxf" # MXF Filter
    $destination = "C:\Users\Leeds TX 12\Desktop\Destination" # Destination dir



################### Watch for file system events###########################

$Watcher = New-Object IO.FilesystemWatcher $Folder, $Filter -Property @{
NotifyFilter = [IO.NotifyFilters]'LastWrite, Filename'
}

################### Register filesystemwatcher & subscribe to notifyfilters ################# 

$onCreated = Register-ObjectEvent $Watcher Created -SourceIdentifier filecreated -Action {
$path = $event.SourceEventArgs.FullPath
$name = $Event.SourceEventArgs.Name
$ChangeType = $Event.SourceEventargs.ChangeType
$Timestamp = $event.TimeGenerated
write-host "The file '$name' was $ChangeType at $Timestamp" # Debug

################# Wait for file lock collapse #########################################

while($True)
{
Try {
      [IO.File]::OpenWrite($path).Close()
      Break
      }
   Catch { Start-Sleep -Seconds 1}
   }

#################### Copy item #############################

Copy-item $path -Destination $Destination -force -Recurse -Verbose}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44583244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档