找回密码
 立即注册

扫一扫,极速登录

搜索
热搜: 活动 交友 discuz
查看: 52|回复: 0

[工具类] C# 之 FileSystemWatcher

[复制链接]
发表于 2025-3-23 11:07:02 | 显示全部楼层 |阅读模式
FileSystemWatcher 是一个用于监视文件系统变化的类,通常用于检测指定目录或文件中的更改,如创建、删除、重命名或修改等操作。它广泛应用于需要实时响应文件系统变化的场景,如自动化备份、日志监控、文件同步等。


1. 主要功能
FileSystemWatcher 可以监视以下类型的事件:

文件或目录的创建:当在指定目录中创建新文件或子目录时触发。
文件或目录的删除:当在指定目录中删除文件或子目录时触发。
文件或目录的重命名:当文件或目录被重命名时触发。
文件或目录的修改:当文件内容或目录结构发生变化时触发。


2. 常用属性
FileSystemWatcher 提供了多个属性来配置其行为:
Path:指定要监视的目录路径。
Filter:设置筛选器,用于指定要监视的文件类型(如 *.txt 只监视文本文件)。
NotifyFilter:指定要监视的变化类型(如文件属性、大小、最后写入时间等)。
IncludeSubdirectories:是否监视子目录中的变化。
EnableRaisingEvents:启用或禁用事件触发。


3. 常用事件
FileSystemWatcher 提供了以下事件来响应文件系统的变化:

Created:当创建文件或目录时触发。
Deleted:当删除文件或目录时触发。
Renamed:当重命名文件或目录时触发。
Changed:当文件或目录被修改时触发。
Error:当监视过程中发生错误时触发。


4. 使用示例
以下是一个简单的 FileSystemWatcher 使用示例(以 C# 为例):
  1. using System;
  2. using System.IO;

  3. class Program
  4. {
  5.     static void Main()
  6.     {
  7.         // 创建 FileSystemWatcher 实例
  8.         FileSystemWatcher watcher = new FileSystemWatcher();

  9.         // 设置要监视的目录
  10.         watcher.Path = @"C:\MyFolder";

  11.         // 设置筛选器,只监视 .txt 文件
  12.         watcher.Filter = "*.txt";

  13.         // 设置监视的变化类型
  14.         watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;

  15.         // 启用事件
  16.         watcher.EnableRaisingEvents = true;

  17.         // 绑定事件处理程序
  18.         watcher.Created += OnChanged;
  19.         watcher.Deleted += OnChanged;
  20.         watcher.Renamed += OnRenamed;
  21.         watcher.Changed += OnChanged;
  22.         watcher.Error += OnError;

  23.         Console.WriteLine("Press 'q' to quit.");
  24.         while (Console.Read() != 'q') ;
  25.     }

  26.     // 处理文件或目录变化的事件
  27.     private static void OnChanged(object source, FileSystemEventArgs e)
  28.     {
  29.         Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");
  30.     }

  31.     // 处理文件或目录重命名的事件
  32.     private static void OnRenamed(object source, RenamedEventArgs e)
  33.     {
  34.         Console.WriteLine($"File: {e.OldFullPath} renamed to {e.FullPath}");
  35.     }

  36.     // 处理错误事件
  37.     private static void OnError(object source, ErrorEventArgs e)
  38.     {
  39.         Console.WriteLine($"Error: {e.GetException().Message}");
  40.     }
  41. }
复制代码



5. 注意事项

性能影响:`FileSystemWatcher` 会占用系统资源,尤其是在监视包含大量文件的目录时。建议合理设置 `Filter` 和 `NotifyFilter` 以减少不必要的触发。
事件重复触发:某些操作(如文件保存)可能会触发多次 `Changed` 事件。可以通过设置延迟处理或去重逻辑来避免重复处理。
权限问题:确保应用程序有足够的权限访问被监视的目录和文件。
网络路径:`FileSystemWatcher` 可以监视网络共享路径,但可能会受到网络延迟或权限限制的影响。


6. 适用场景

日志监控:实时监控日志文件的变化并处理新内容。
文件同步:在文件发生变化时自动同步到其他位置。
自动化任务:在文件创建或修改时触发后续处理流程。




通过 `FileSystemWatcher`,开发者可以轻松实现对文件系统变化的实时监控和响应。

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

QQ|Archiver|手机版|小黑屋|西兴社区 ( 蜀ICP备2022005627号 )|网站地图

GMT+8, 2025-4-3 14:09 , Processed in 0.185784 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表