2012-09-04 3 views
0

는 파일이 FileWatcher 폴더에 복사 할 때마다은 FileSystemWatcher가 3 이벤트를 생성하는 것입니다은 FileSystemWatcher - 파일 복사 중 3 개 이벤트

예 : 오전 점점 작성 -> 변경 ->시 (을 변경 새 파일) 또는 변경됨 -> 변경됨 -> File.Copy (source, watcherFolder, true)를 사용하여 FileWatcher 폴더로 파일을 복사 할 때 (기존 파일 덮어 쓰기 중) 이벤트로 변경되었습니다.

크기가 다른 파일 (1kb, 67kb, 100MB, 500MB, 1GB 파일)을 복사 할 때 3 이벤트가 발생합니다. FileSystemWatcher에서 Created 및 Changed 이벤트에 대해 등록했습니다.

+0

예, FileSystemWatcher는 파일에 대한 특정 기록에 대해 Changed 이벤트로 알려줍니다. 그것이 원하는 것이 아니라면 더 자세하게 설명하십시오. –

답변

2

수신중인 여러 이벤트에 관한 질문은 정상적인 동작입니다. 파일 복사는 여러 이벤트를 발생시킬 수 있습니다.

변경 사항을 FileSystemEventArgs.ChangeType에서 확인하고 일부 이벤트는 무시할 수 있습니다. WatcherChangeTypes Enumeration입니다.

FileSystemWatcher에서보십시오.

Created 이벤트에 대해서는 대상 폴더에서 발생합니다.

예를 들어, FileSystemWatcher의 인스턴스 두 개를 생성합니다. FileSystemWatcher1은 "C : \ My Documents"를 보도록 설정되고 FileSystemWatcher2는 "C : \ Your Documents"를 보도록 설정됩니다. "내 문서"의 파일을 "자신의 문서"로 복사하면 FileSystemWatcher2가 만든 이벤트를 생성하지만 FileSystemWatcher1의 이벤트는 발생하지 않습니다. 복사와 달리 파일이나 디렉토리를 이동하면 두 개의 이벤트가 발생합니다. 앞의 예에서 파일을 "내 문서"에서 "내 문서"로 이동하면 Created 이벤트는 FileSystemWatcher2에 의해 생성되고 Deleted 이벤트는 FileSystemWatcher1에 의해 생성됩니다.

+0

파일을 파일 감시자 폴더에 복사 할 때 파일을 파일 감시자 폴더에 완전히 복사했는지 어떻게 확인할 수 있습니까? – snober

+0

내 답변 편집 : 대상 폴더 (즉, 파일이 복사 된 디렉토리)에서 Created 이벤트를 시청해야합니다. – JoeBilly

+0

@Snober 파일 잠김 여부를 테스트합니다. 코드 게시 방법을 모르는 경우. 그러나 주석에는 없다. –

1

주석에서 언급 한 것처럼 작성중인 파일을 찾은 다음 파일 잠금을 시도하여 파일이 완전히 복사되었는지 확인해야합니다. 이 파일 복사 작업의 제어에있는 경우

while ($true) 
    { 
     try{ 
      [IO.file]::openwrite("<insert file path>").close() 
      break 
     } 
     catch { start-sleep -Seconds 60 } 
    } 
0

는 할 수있는 간단한 일 임시 이름으로 파일을 생성하고이 복사 된 후 이름을 변경하는 것입니다. FileSystemWatcherRename 이벤트가 표시되도록하십시오. 이 이벤트는 한 번만 발생합니다.