C# 中一个非常实用的类FileSystemWatcher,监视文件系统中文件或目录的更改

FileSystemWatcher 类在 C# 中是一个非常实用的类,用于监视文件系统中文件或目录的更改,并可以触发事件来响应这些更改。这些更改包括文件或目录的创建、删除、更改以及重命名等。以下是如何在 C# 中使用 FileSystemWatcher 的基本步骤:

目录

1. 引入命名空间

2. 创建 FileSystemWatcher 实例

3. 编写事件处理程序

4. 注意事项


1. 引入命名空间

首先,需要引入 System.IO 命名空间,因为 FileSystemWatcher 类定义在这个命名空间中。

using System;  
using System.IO;

2. 创建 FileSystemWatcher 实例

接着,创建一个 FileSystemWatcher 的实例,并设置其属性,如要监视的目录(Path)、要监视的文件类型(Filter)、以及是否监视子目录(IncludeSubdirectories)等。

using (var watcher = new FileSystemWatcher())  
{  
    watcher.Path = @"C:\path\to\directory";  
  
    // 监视所有文件  
    watcher.Filter = "*.*";  
  
    // 设置为 true 以监视子目录  
    watcher.IncludeSubdirectories = true;  
  
    // 根据需要设置其他属性  
    // watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite  
    // 等...  
  
    // 绑定事件处理程序  
    watcher.Changed += OnChanged;  
    watcher.Created += OnCreated;  
    watcher.Deleted += OnDeleted;  
    watcher.Renamed += OnRenamed;  
    watcher.Error += OnError;  
  
    // 开始监视  
    watcher.EnableRaisingEvents = true;  
  
    // 等待用户输入或其他操作  
    Console.WriteLine("Press enter to exit the application.");  
    Console.ReadLine();  
}

3. 编写事件处理程序

为 FileSystemWatcher 触发的事件(如 ChangedCreatedDeletedRenamed 和 Error)编写事件处理程序。

private static void OnChanged(object source, FileSystemEventArgs e)  
{  
    Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");  
}  
  
private static void OnCreated(object source, FileSystemEventArgs e)  
{  
    Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");  
}  
  
private static void OnDeleted(object source, FileSystemEventArgs e)  
{  
    Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");  
}  
  
private static void OnRenamed(object source, RenamedEventArgs e)  
{  
    Console.WriteLine($"File: {e.OldFullPath} renamed to {e.FullPath}");  
}  
  
private static void OnError(object source, ErrorEventArgs e)  
{  
    PrintException(e.GetException());  
}  
  
private static void PrintException(Exception ex)  
{  
    if (ex != null)  
    {  
        Console.WriteLine($"Message : {ex.Message}");  
        PrintException(ex.InnerException);  
    }  
}

4. 注意事项

  • FileSystemWatcher 并不保证捕获到所有文件系统事件,因为文件系统通知是基于底层操作系统功能的,可能会受到操作系统限制和延迟的影响。
  • FileSystemWatcher 的 Path 属性必须是一个有效的目录路径。
  • 监视子目录(IncludeSubdirectories 属性)可能会消耗大量资源,特别是当子目录结构很深或很大时。
  • FileSystemWatcher 触发的事件(尤其是 Changed 事件)可能会因为多种原因而触发,如文件属性更改或文件内容更改等。你可能需要更细致地检查触发事件的原因。

通过使用 FileSystemWatcher,可以很容易地在 C# 应用程序中监视文件系统变化,并作出相应的响应。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AitTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值