4

監視されているディレクトリにコピーされたすべてのフォルダに対して起動しFileSystemWatcherたいということがあります。複数のフォルダが、手動で一度にこの監視ディレクトリにコピーされます。OnCreated event

現在、eventコピーされた最初のフォルダーに対してのみ起動しています。
したがって、フォルダー X を監視していて、Windows エクスプローラーでフォルダー A、B、C を選択し、それらを X にコピーするとOnCreated、A に対して起動されますが、B または C に対しては起動されません。

これは、次の設定に使用している私のコードですFileSystemWatcher

watcher = new System.IO.FileSystemWatcher(watchPath);            
watcher.InternalBufferSize = 32768;
watcher.IncludeSubdirectories = true;
watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName | 
                       NotifyFilters.CreationTime | NotifyFilters.LastWrite;


watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnCreated);
watcher.EnableRaisingEvents = true;

ここに私のOnCeated方法があります

void OnCeated(object sender, FileSystemEventArgs e)
{            
    XDocument xmlDoc = BeginImport(e.FullPath); 
}

これが、監視対象のディレクトリにコピーされ た最初のフォルダーに対してのみイベントを発生させる理由は何ですか?

4

1 に答える 1

10

ドキュメントから:

Windows オペレーティング システムは、FileSystemWatcher によって作成されたバッファー内のファイルの変更をコンポーネントに通知します。短時間に多くの変更がある場合、バッファがオーバーフローする可能性があります。これにより、コンポーネントはディレクトリ内の変更を追跡できなくなり、一括通知のみが提供されます。InternalBufferSize プロパティを使用してバッファーのサイズを大きくすると、ディスクにスワップ アウトできない非ページ メモリに由来するため、負荷が高くなります。そのため、ファイル変更イベントを見逃さないように、バッファーをできるだけ小さく保ちます。バッファ オーバーフローを回避するには、NotifyFilter プロパティと IncludeSubdirectories プロパティを使用して、不要な変更通知を除外できるようにします。

内部制限のようです。

一度に 3 つのフォルダーすべてを貼り付ける行為は、「短時間で多くの変更が加えられた」と見なされると思います。NotifyFilterを使用して、いくつかのイベントを除外できますか?

于 2012-09-18T18:29:02.720 に答える