FileSystemWatcher - 同步已更改的文件

时间:2012-01-25 15:17:06

标签: c# 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);

我希望能够添加一些代码,将已更改/重命名的任何文件转储到另一个本地目录,但我不知道从哪里开始。在那一刻,控制台正在回写Fullpath给我,但理想情况下我希望将它复制到另一个文件夹

谢谢大家

1 个答案:

答案 0 :(得分:1)

您可以使用string destination = Path.Combine(localDirectory, e.Name);创建目标路径,File.Copy(e.FullPath, destination);实际复制文件。

请注意,当您收到Changed事件时,进程可能仍在写入文件,因此您可能会收到异常或复制半处理数据。如果文件已存在于本地目录中,您应该考虑如何处理(注意File.Copy(string, string, bool overwrite)重载)。

另外,请确保检查更改的项目是文件而不是目录(例如,使用File.Exists(e.FullPath)