2014-05-20 3 views
0

내가 그러나파일을 만들고 닫은 후 FileSystemWatcher가 동작을 트리거하는 방법은 무엇입니까?

$folder = '....' 
$filter = '*.csv' 
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{ 
    IncludeSubdirectories = $true; 
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite' } 
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 
    $name = $Event.SourceEventArgs.Name 
    $changeType = $Event.SourceEventArgs.ChangeType 
    $timeStamp = $Event.TimeGenerated 
    Write-Host "The file '$name' was $changeType at $timeStamp" -fore green 
    ... #execute a program to read the files, 
    ... #may fail because file is still being writing..... } 

를 시작하려면 다음 코드를 사용하고, 나는 작업이 즉시 파일이 생성 될 때 트리거됩니다. 폴더에 덤프/복사되는 수백 개의 포옹 파일이있을 수 있습니다. 파일 쓰기가 완료되었는지 테스트 할 수 있습니까?

답변

1

하나의 가능성 :

파일이 기록되고 수행하고 [IO.File]::OpenWrite($File).Close() 즉시 다음, 쓰기 위해 파일을 열 수를 닫습니다 폐쇄 된 경우
Try { 
    [IO.File]::OpenWrite($File).Close() 
    #Do something with file 
} 
Catch {} 

. 여전히 기록중인 경우 쓰기 잠금을 얻을 수 없으므로 명령이 실패하고 스크립트가 Catch 블록으로 이동하여 다음 LastWrite 이벤트를 기다립니다.

관련 문제