2012-01-25 7 views
0

初心者プログラマここにファイルを変更し、それが意味:)FileSystemWatcher - 同期が....

私はバックグラウンドで実行し、すべての変更のためのディレクトリを監視する必要がありコンソールアプリケーションを作成しましたが、/イベントの名前を変更します願っています。私はFileWatcherクラスを使用しているとなるようにイベントハンドラを追加しました:

watcher.Changed += new FileSystemEventHandler(OnChanged); 
    watcher.Created += new FileSystemEventHandler(OnChanged); 
    watcher.Deleted += new FileSystemEventHandler(OnChanged); 
    watcher.Renamed += new RenamedEventHandler(OnRenamed); 

ので、その後のような下のハンドラを定義した:

private static void OnChanged(object source, FileSystemEventArgs e) 
{ 
    //specify what is done when a file is changed, created or deleted 
    Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); 
} 
private static void OnRenamed(object source, RenamedEventArgs e) 
{ 
    //specify what is done when a file is renamed 
    Console.WriteLine("File {0} renamed to {1}", e.OldFullPath, e.FullPath); 

私はいくつかのコードでそれを追加できるようにしたいと思います変更/名前を変更したファイルを別のローカルディレクトリにダンプしますが、どこから起動するのか分かりません。分で、コンソールは、私へのフルパスをバック書いているが、理想的に私はそれはあなたが先パスとFile.Copy(e.FullPath, destination);実際にコピーしたファイルを作成するためにstring destination = Path.Combine(localDirectory, e.Name);を使用することができ、別のフォルダに

おかげでみんな

答えて

1

ことをコピーしたいと思います。

Changedイベントが発生すると、プロセスがファイルに書き込んでいる可能性があるので、例外が発生したり、ハーフ処理されたデータをコピーしたりする可能性があります。また、ファイルがローカルディレクトリにすでに存在する場合はどう対処するべきか考えてください(File.Copy(string, string, bool overwrite)のオーバーロードに注意してください)。

また、変更されたアイテムは、ファイルやディレクトリではなく(例えば、File.Exists(e.FullPath)を使用しているかどうかをチェックしてください。