• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
学习笔记
Misaka的学习笔记
博客园    首页    新随笔    联系   管理    订阅  订阅
c#学习笔记--------------------------FileSystemWatcher对象的使用

一、FileSystemWatcher常用属性

FileSystemWatcher常用于监视文件系统的变更,当文件系统中的文件或者文件夹被修改会自动触发相应的回调事件。

1、常用事件

Changed: 当文件或者文件夹已经完成修改时触发此事件

Created:当文件或者文件夹已经成功创建触发此事件

Deleted:当文件或者文件夹已经成功删除触发此事件

Error:当变更的过程中发生错误触发此事件。

Renamed:当文件或者文件夹已经成功被重命名时触发此事件

2、常用基本属性

Path :设置要监视的目录的路径。
IncludeSubdirectories :设置是否级联监视指定路径中的子目录。
Filter :设置筛选字符串,用于确定在目录中监视哪些类型的文件。
NotifyFilter :设置文件的哪些属性的变动会触发 Changed事件,同时监控多个属性变动可以按“或”组合。(默认值为 NotifyFilter.LastWrite | NotifyFilter.FileName | NotifyFilter.DirectoryName 组合)
子项:

Attributes – 文件或文件夹的属性。

CreationTime – 文件或文件夹的创建时间。

DirectoryName – 目录名。(常用)

FileName – 文件名。 (常用)

LastAccess – 文件或文件夹上一次打开的日期。

LastWrite – 上一次向文件或文件夹写入内容的日期。

Security – 文件或文件夹的安全设置。

Size – 文件或文件夹的大小。 (常用)

EnableRaisingEvents :设置是否开始监控。(默认为false)

二、一个简单的 file 监视程序

代码如下(示例):

 static void Main(string[] args)
    {
          string path = @"D:\Data";
          MonitorDirectory(path,"*.*");
          Console.ReadKey();
          Console.WriteLine("按q退出!");
        while (Console.Read() != 'q') ;
    }

监听方法:

  private static void MonitorDirectory(string path, string filter)
    {
      FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
      fileSystemWatcher.Path = path;
      fileSystemWatcher.NotifyFilter = NotifyFilters.LastAccess 
                                     | NotifyFilters.LastWrite 
                                       | NotifyFilters.FileName            
                                       |NotifyFilters.DirectoryName;
       //文件类型,支持通配符,“*.txt”只监视文本文件
      fileSystemWatcher.Filter = filter;    // 监控的文件格式
      watch.IncludeSubdirectories = true;  // 监控子目录
      fileSystemWatcher.Changed += new FileSystemEventHandler(OnProcess);
      fileSystemWatcher.Created += new FileSystemEventHandler(OnProcess);
      fileSystemWatcher.Renamed += new RenamedEventHandler(OnRenamed);
      fileSystemWatcher.Deleted += new FileSystemEventHandler(OnProcess);
      //表示当前的路径正式开始被监控,一旦监控的路径出现变更,FileSystemWatcher 中的指定事件将会被触发。
      fileSystemWatcher.EnableRaisingEvents = 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("File created: {0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
    }

    private static void OnChanged(object source, FileSystemEventArgs e)
    {
      Console.WriteLine("File changed: {0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
    }

    private static void OnDeleted(object source, FileSystemEventArgs e)
    {
      Console.WriteLine("File deleted: {0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
    }

    private static void OnRenamed(object source, FileSystemEventArgs e)
    {
      Console.WriteLine("File renamed: {0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
    }

 

 

posted on 2023-07-09 19:57  我们打工人  阅读(385)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3