つまり、ファイルが FileWatcher フォルダーにコピーされるときにFileSystemWatcher が3 つのイベントを生成するたびに
例 : File.Copy ( source, watcherFolder ,真実)。
異なるサイズのファイル (1kb、67kb、100MB、500MB、1 GB ファイル) をコピーすると、3 つのイベントが発生します。FileSystemWatcher の Created および Changed イベントに登録しました
つまり、ファイルが FileWatcher フォルダーにコピーされるときにFileSystemWatcher が3 つのイベントを生成するたびに
例 : File.Copy ( source, watcherFolder ,真実)。
異なるサイズのファイル (1kb、67kb、100MB、500MB、1 GB ファイル) をコピーすると、3 つのイベントが発生します。FileSystemWatcher の Created および Changed イベントに登録しました
受信している複数のイベントに関する質問の場合、これは正常な動作です。ファイルのコピーでは、複数のイベントが発生する可能性があります。
FileSystemEventArgs.ChangeTypeで変更を確認し、一部のイベントを無視できます。これがWatcherChangeTypes Enumerationです。
FileSystemWatcher Remarksを見てください。
Createdイベントについては、移動先のフォルダで発生します。
たとえば、FileSystemWatcher の 2 つのインスタンスを作成します。FileSystemWatcher1 は「C:\My Documents」を監視するように設定され、FileSystemWatcher2 は「C:\Your Documents」を監視するように設定されています。「My Documents」から「Your Documents」にファイルをコピーすると、FileSystemWatcher2 によって Created イベントが発生しますが、FileSystemWatcher1 のイベントは発生しません。コピーとは異なり、ファイルまたはディレクトリを移動すると、2 つのイベントが発生します。前の例から、ファイルを "My Documents" から "Your Documents" に移動した場合、FileSystemWatcher2 によって Created イベントが発生し、FileSystemWatcher1 によって Deleted イベントが発生します。
コメントに記載されているように、作成中のファイルを探してから、ファイル ロックを試みて、ファイルが完全にコピーされているかどうかを判断する必要があります。
while ($true)
{
try{
[IO.file]::openwrite("<insert file path>").close()
break
}
catch { start-sleep -Seconds 60 }
}
ファイルのコピー操作を管理している場合、一時的な名前でファイルを作成し、コピー後に名前を変更するのが簡単です。イベントFileSystemWatcher
を見守りましょう。Rename
このイベントは 1 回だけ発生します。