首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

16.12  以编程方式“观察”文件

现在知道了各种读取器和编写器的使用,下面看看FileSystemWatcher类的作用。当我们想编程监控(或者观察)系统上的文件的时候,这个类就非常有用。特别的是,我们能通过NotifyFilters枚举来决定需要FileSystemWatcher监控文件的行为(大多数成员都能通过字面了解其含义,详细信息请参考在线帮助):

 

public enum System.IO.NotifyFilters

{

  Attributes, CreationTime,

  DirectoryName, FileName,

  LastAccess, LastWrite,

  Security, Size,

}

 

使用FileSystemWatcher类型的第一步是设置Path属性,以指定需要监控的文件所在文件夹的名字(或者位置),还有就是定义需要监控文件的扩展名的Filter属性。

至此,我们可以选择使用FileSystemEventHandler委托关联的事件来实现ChangedCreatedDeleted事件的处理方法。这个委托可以调用任何符合下列模式的方法:

 

// FileSystemEventHandler委托必须指向符合下列签名的方法。

void MyNotificationHandler(object source, FileSystemEventArgs e)

 

同样,重命名事件也可以通过RenamedEventHandler委托类型来处理,调用的方法必须符合下列签名:

 

// RenamedEventHandler委托必须指向符合下列签名的方法。

void MyNotificationHandler(object source, RenamedEventArgs e)

 

为了演示观察文件的过程,假设我们已经在C盘新建了一个名为MyFolder的目录,其中包含了各种*.txt文件(什么名字都可以)。下面这个控制台应用程序将会监控这些MyFolder下的*.txt文件,并显示出文件的建立、删除、修改和重命名事件的消息。

 

static void Main(string[] args)

{

  Console.WriteLine("***** The Amazing File Watcher App *****\n");

 

    // 确定指向要观察的目录的路径。

  FileSystemWatcher watcher = new FileSystemWatcher();

  try{

    watcher.Path = @"C:\MyFolder";

  }

  catch(ArgumentException ex) {

    Console.WriteLine(ex.Message);

    return;

  }

 

    // 设置需要“留意”的事情。

  watcher.NotifyFilter = NotifyFilters.LastAccess

    | NotifyFilters.LastWrite

    | NotifyFilters.FileName

    | NotifyFilters.DirectoryName;

 

    // 只观察文本文件。

  watcher.Filter = "*.txt";

 

    // 增加事件处理程序。

  watcher.Changed += new FileSystemEventHandler(OnChanged);

  watcher.Created += new FileSystemEventHandler(OnChanged);

  watcher.Deleted += new FileSystemEventHandler(OnChanged);

  watcher.Renamed += new RenamedEventHandler(OnRenamed);

 

    // 开始观察目录。

  watcher.EnableRaisingEvents = true;

 

    // 等待用户退出程序。

  Console.WriteLine(@"Press 'q' to quit app.");

  while(Console.Read()!='q');

}

 

这两个事件处理程序输出了当前文件的修改:

 

static void OnChanged(object source, FileSystemEventArgs e)

{

    // 指定当文件改变、创建或者删除的时候需要做的行为。

  Console.WriteLine("File: {0} {1}!", e.FullPath, e.ChangeType);

}

 

static void OnRenamed(object source, RenamedEventArgs e)

{

    // 指定当文件重命名的时候需要做的行为。

  Console.WriteLine("File: {0} renamed to\n{1}", e.OldFullPath, e.FullPath);

}

 

为了测试该程序,运行应用程序并且打开Windows资源管理器。试着重命名文件、新建一个*.txt文件、删除一个*.txt文件等,我们就会看到这个控制台应用程序输出了各种关于MyFolder文件夹内文本文件当前状态的信息。

16-10  观察一些文本文件

源代码      MyDirectoryWatcher项目的源代码位于Chapter 16子目录下。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论