如何监视文件系统更改
使用 FileSystemWatcher 组件监视文件系统,并且在文件系统发生更改时进行反应。这使在创建、修改或删除某些文件或目录时,能快速、方便地启动业务处理。例如,假定您和一组同事合作处理存储在服务器的某共享目录中的一个文档。使用 FileSystemWatcher 组件,可以容易地设计应用程序以监视对该共享目录的更改。当检测到更改时,组件可以运行处理,通过电子邮件通知组中的每个成员。
该示例阐释如何使用 FileSystemWatcher,来监视对指定目录中任何文件的所有更改(包括重命名、创建和删除)。应用程序仅将您希望监视的目录作为参数。
请尝试按下文所示运行示例:
> Watcher.exe c:\\
现在请打开 c:\\ directory,然后尝试创建、修改和删除目录中的文件。注意示例应用程序向控制台窗口输出正确的消息。
使用 FileSystemWatcher 至少包括:
创建组件的新实例并指定要监视的目录:
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path= "c:\\Foo";

添加一个或多个事件处理程序:
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);

指定当更改发生时应用程序应该执行的操作:
public void OnChanged(object source, FileSystemEventArgs e) &leftsign;
  Console.Write("File: &leftsign;0&rightsign; &leftsign;1&rightsign;", e.FullPath, e.ChangeType);
&rightsign;

启用组件:
watcher.EnableRaisingEvents = true;

using System;
using System.IO;
public class Watcher &leftsign;
    public static void Main(String[] args) &leftsign;
        if(args.Length < 1) &leftsign;
            Console.WriteLine("用法:Watcher.exe <directory>");
        &rightsign; else &leftsign;
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path= args[0];
            watcher.NotifyFilter = NotifyFilters.FileName &line; NotifyFilters.Attributes &line; NotifyFilters.LastAccess &line; NotifyFilters.LastWrite &line; NotifyFilters.Security &line; NotifyFilters.Size;
            watcher.Changed += new FileSystemEventHandler(OnChanged);
            watcher.Created += new FileSystemEventHandler(OnChanged);
            watcher.Deleted += new FileSystemEventHandler(OnChanged);
            watcher.Renamed += new RenamedEventHandler(OnRenamed);
            watcher.EnableRaisingEvents = true;
        &rightsign;
        Console.WriteLine("按 Enter 键退出该示例\\r\\n");
        Console.ReadLine();
    &rightsign;
    public static void OnChanged(object source, FileSystemEventArgs e) &leftsign;
        Console.WriteLine("文件:&leftsign;0&rightsign; &leftsign;1&rightsign;", e.FullPath, e.ChangeType.ToString("G"));
    &rightsign;
    public static void OnRenamed(Object source, RenamedEventArgs e) &leftsign;
        Console.WriteLine("文件:&leftsign;0&rightsign; 已重命名为 &leftsign;1&rightsign;", e.OldFullPath, e.FullPath);
    &rightsign;
&rightsign;

历史博文

标签:
五月 17, 2005 at 2:22 下午 by yippee 1,069 次
Category: Info
Tags: