管理

了解如何在 C# 中使用 FileSystemWatcher

Posted on 2024-12-01 21:33  lzhdim  阅读(95)  评论(0)    收藏  举报

引言

存储在磁盘中的文件,由于对其操作,文件会产生变化。如何监视文件系统的变化,如文件的创建、删除、修改和重命名等。.NET框架是否提供什么相关类库。本文了解C#如何使用FileSystemWatcher实现监控磁盘文件变化。

FileSystemWatcher

1、概述

FileSystemWatcher是一个位于System.IO中的类库,主要用于侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。如文件的创建、删除、修改和重命名等。

2、基本属性

  • EnableRaisingEvents

决定对象在收到改变通知时是否提交事件,true表示将提交改变事件;false表示不提交改变事件。

  • Filter

用于过滤掉某些类型的文件发生的变化。例如,如需监控txt文件的修改、新建、删除时提交通知,则设置该属性为 *.txt 。

  • Path

用于设置需要监控哪个文件目录。例如,如需监控C:\Temp目录,则设置该属性为 C:\Temp。

  • IncludeSubDirectories

决定是否应该监控子目录中发生的改变,true表示监控需包含子目录;false表示监控不需包含子目录。

3、基本事件

  • Changed

表示监控目录中的文件被修改时,触发此事件。由于文件保存时,它的其它属性也会发生改变,所以事件会被提交多次。

  • Created

表示当监控目录有新建文件时,触发此事件。

注:

常见的文件系统操作可能会引发多个事件。 例如,移动文件是一项复杂的操作,可以能会引发多个 OnChanged、OnDeleted和OnCreated 事件。 如果没有正确处理这种情况的代码,就可能出现异常。

  • Deleted

表示当监控目录有文件被删除时,触发此事件。

  • Renamed

表示当监控目录有文件的名称被修改时,触发此事件。

示例

用于监视 C:\Logs 目录下,关于 *.log 文件的变化的示例:

namespace Fountain.WinConsole.FileWatcherDemo{    internal class Program    {        static void Main(string[] args)        {            // 创建一个 Mutex 以防止多个实例同时运行            using (var mutex = new Mutex(true, "Fountain.WinConsole.FileWatcherDemo.exe", out bool createdNew))            {                if (!createdNew)                {                    Console.WriteLine($"应用程序已在运行中...");                    return;                }                // 创建 FileSystemWatcher 监控                var fileSystemWatcher = new FileSystemWatcher                {                    // 监视 log 文件变化                    Filter = "*.log",                    // 监视目录                    Path =  @"C:\Logs",                    // 是否包含子目录                    IncludeSubdirectories = true,                    // 通知时是否提交事件                    EnableRaisingEvents = true                };                //                 fileSystemWatcher.Changed += MonikerOnChange;                //                 fileSystemWatcher.Created += MonikerOnCreated;                //                 while (true)                {                    Thread.Sleep(1000);                }            }        }        /// <summary>        ///        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private static void MonikerOnChange(object sender, FileSystemEventArgs e)        {            // 处理文件更改事件            Console.WriteLine($"发生变更的文件: {e.FullPath}");        }        /// <summary>        ///        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private static void MonikerOnCreated(object sender, FileSystemEventArgs e)        {            // 处理文件创建事件            Console.WriteLine($"新创建的文件: {e.FullPath}");        }    }}

小结

以上是FileSystemWatcher在C#中实现监控文件夹和文件的使用方法,希望对您有所收获,如有不到之处,请多多包涵。

Copyright © 2000-2022 Lzhdim Technology Software All Rights Reserved