FileSystemWatcher使用方法

在实际工作中,我们经常有需要监控部分文件或文件夹更改的需求。这时候,FileSystemWatcher就派上用场了。

首先我们new一个FileSystemWatcher实例

FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

然后我们可以通过设置Path来指定一个监视目录。

fileSystemWatcher.Path = @"D:\test";

注意,这里只能是一个目录,而不能是一个文件。

那么如果我们只想监视某个文件怎么办呢?

可以设置Filter来指定只监控某种类型的文件,或者某个文件。

fileSystemWatcher.Filter = "*.txt";

设置只监控txt文件,也可以设置成test.txt,这样就只监控text.txt这一个文件。

设置是否同时监控子目录

fileSystemWatcher.IncludeSubdirectories = true;

true为监控子目录。

还可以设置监听哪些改变

            fileSystemWatcher.NotifyFilter = NotifyFilters.Attributes
                                             | NotifyFilters.CreationTime
                                             | NotifyFilters.DirectoryName
                                             | NotifyFilters.FileName
                                             | NotifyFilters.LastAccess
                                             | NotifyFilters.LastWrite
                                             | NotifyFilters.Security
                                             | NotifyFilters.Size;

NotifyFilters的具体含义如下:

属性名

code

意思

Attributes

4

文件或文件夹的属性。

CreationTime

64

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

DirectoryName

2

目录名。

FileName

1

文件的名称。

LastAccess

32

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

LastWrite

16

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

Security

256

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

Size

8

文件或文件夹的大小。

监控事件分为ChangedCreatedDeletedRenamedError五种。

            fileSystemWatcher.Changed += OnChanged;
            fileSystemWatcher.Created += OnCreated;
            fileSystemWatcher.Deleted += OnDeleted;
            fileSystemWatcher.Renamed += OnRenamed;
            fileSystemWatcher.Error += OnError;

简易使用如下:

private static void OnChanged(object sender, FileSystemEventArgs e)
        {
            if (e.ChangeType != WatcherChangeTypes.Changed)
            {
                return;
            }
            Console.WriteLine($"Changed: {e.FullPath}");
        }

        private static void OnCreated(object sender, FileSystemEventArgs e)
        {
            string value = $"Created: {e.FullPath}";
            Console.WriteLine(value);
        }

        private static void OnDeleted(object sender, FileSystemEventArgs e) =>
            Console.WriteLine($"Deleted: {e.FullPath}");

        private static void OnRenamed(object sender, RenamedEventArgs e)
        {
            Console.WriteLine($"Renamed:");
            Console.WriteLine($"    Old: {e.OldFullPath}");
            Console.WriteLine($"    New: {e.FullPath}");
        }

        private static void OnError(object sender, ErrorEventArgs e) =>
            PrintException(e.GetException());

        private static void PrintException(Exception? ex)
        {
            if (ex != null)
            {
                Console.WriteLine($"Message: {ex.Message}");
                Console.WriteLine("Stacktrace:");
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine();
                PrintException(ex.InnerException);
            }
        }

最后,我们需要设置

fileSystemWatcher.EnableRaisingEvents = true;

来启用监听,这时候如果有更改,就会触发对应的事件了。

posted @   jvx  阅读(1755)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示