1

つまり、ファイルが FileWatcher フォルダーにコピーされるときにFileSystemWatcher が3 つのイベントを生成するたびに

例 : File.Copy ( source, watcherFolder ,真実)。

異なるサイズのファイル (1kb、67kb、100MB、500MB、1 GB ファイル) をコピーすると、3 つのイベントが発生します。FileSystemWatcher の Created および Changed イベントに登録しました

4

3 に答える 3

2

受信している複数のイベントに関する質問の場合、これは正常な動作です。ファイルのコピーでは、複数のイベントが発生する可能性があります。

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 イベントが発生します。

于 2012-09-04T13:26:16.930 に答える
1

コメントに記載されているように、作成中のファイルを探してから、ファイル ロックを試みて、ファイルが完全にコピーされているかどうかを判断する必要があります。

    while ($true)
    {
        try{ 
            [IO.file]::openwrite("<insert file path>").close()
            break
        }
        catch { start-sleep -Seconds 60 }
    }
于 2014-03-08T20:36:25.100 に答える
0

ファイルのコピー操作を管理している場合、一時的な名前でファイルを作成し、コピー後に名前を変更するのが簡単です。イベントFileSystemWatcherを見守りましょう。Renameこのイベントは 1 回だけ発生します。

于 2014-03-08T20:49:29.977 に答える