亲宝软件园·资讯

展开

C# FileSystemWatcher C# FileSystemWatcher 在监控文件夹和文件时如何使用

spring yang 人气:0

概述

最近学习FileSystemWatcher的用法,它主要是监控一个文件夹,当文件夹内的文件要是有更改就要记录下来,我就整理下我对FileSystemWatcher 的理解和用法.

FileSystemWatcher 用法

在应用FileSystemWatcher对象之前,你必须了解这个对象的一些基本属性和事件。毫无疑问,这个对象的最重要的属性为“EnableRaisingEvents”属性。

这个属性决定对象在收到改变通知时是否提交事件。如果EnableRaisingEvents属性设为假,对象将不会提交改变事件。如果设为真,它将提交改变事件。下面是你在应用FileSystemWatcher对象时将要用到的其它一些重要属性/事件:

属性:

事件

注:如果你没有将EnableRaisingEvents设为真,系统不会提交任何一个事件。如果有时FileSystemWatcher对象似乎无法工作,请首先检查EnableRaisingEvents,确保它被设为真。

事件处理

当FileSystemWatcher调用一个事件处理器时,它包含两个自变量——一个叫做“sender”的对象和一个叫做“e”的FileSystemEventArgs对象。我们感兴趣的自变量为FileSystemEventArgs自变量。这个对象中包含有提交事件的原因。以下是FileSystemEventArgs对象的一些属性:

属性:

FileSystemWatcher对象为你完成目录监控工作。如果新建、更新或删除一个文件,FileSystemWatcher将提交一个事件,通知你发生了一项改变。这样,新建一个文件后,你的程序立即就知道可以使用这个文件。立即通知改变使得你的系统以更高的效率工作,因为你不能总是“调查”目录中发生的改变,而且在两次目录扫描之间也不会有时间流失。

示例:

class Program
  {
    static void Main(string[] args)
    {
      WatcherStrat(@"D:\spring\Program", "*.*");
      Console.ReadKey();
 
    }
 
    private static void WatcherStrat(string path, string filter)
    {
 
      FileSystemWatcher watcher = new FileSystemWatcher();
      watcher.Path = path;
      watcher.Filter = filter;
      watcher.Changed += new FileSystemEventHandler(OnProcess);
      watcher.Created += new FileSystemEventHandler(OnProcess);
      watcher.Deleted += new FileSystemEventHandler(OnProcess);
      watcher.Renamed += new RenamedEventHandler(OnRenamed);
      watcher.EnableRaisingEvents = true;
      watcher.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastAccess
                 | NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size;
      watcher.IncludeSubdirectories = true;
    }
 
    private static void OnProcess(object source, FileSystemEventArgs e)
    {
      if (e.ChangeType == WatcherChangeTypes.Created)
      {
        OnCreated(source, e);
      }
      else if (e.ChangeType == WatcherChangeTypes.Changed)
      {
        OnChanged(source, e);
      }
      else if (e.ChangeType == WatcherChangeTypes.Deleted)
      {
        OnDeleted(source, e);
      }
 
    }
    private static void OnCreated(object source, FileSystemEventArgs e)
    {
      Console.WriteLine("文件新建事件处理逻辑 {0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
    }
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
      Console.WriteLine("文件改变事件处理逻辑{0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
    }
    
    private static void OnDeleted(object source, FileSystemEventArgs e)
    {
      Console.WriteLine("文件删除事件处理逻辑{0} {1}  {2}", e.ChangeType, e.FullPath, e.Name);
    }
    
    private static void OnRenamed(object source, RenamedEventArgs e)
    {
      Console.WriteLine("文件重命名事件处理逻辑{0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
    }
  }

运行结果

总结

1、重命名会触发两个事件,Renamed和Changed。

2、FileSystemWatcher对NTFS和FAT32的磁盘监控的效果都是一样吗?

加载全部内容

相关教程
猜你喜欢
用户评论