Winform从入门到精通(41)——FileSystemWatcher(史上最全)

前言

我们在软件开发中有时候需要监控某个目录或者文件被更改了或者重命名了或者删除了,或者新建了,当有这种需求的时候,就可以使用FileSystemWatcher控件

一、属性

1、Path

设置要监控的文件路径,要注意这个路径是完全限定的路径,比如下面代码:

 fileSystemWatcher1.Path = @"D:\";//监控d盘中的Test文件夹
            fileSystemWatcher1.Filter = "1.txt";//监控1.txt文件

上述代码监控的是D盘里面的1.txt文件,但是并不包含D盘中的文件夹里面的文件,比如D盘中有个文件夹名叫Test,然后Test文件夹里面有个文件叫1.txt,则这个Test文件夹里面的1.txt文件是不能被监控到的。如果既要监控D盘里面的文件,又要监控D盘中的文件夹里面的文件,那么要将IncludeSubdirectories属性设置为true,代码如下:

 fileSystemWatcher1.Path = @"D:\";//监控d盘中的Test文件夹
            fileSystemWatcher1.Filter = "1.txt";//监控1.txt文件
            fileSystemWatcher1.IncludeSubdirectories = true;//监控Path的子目录

这样就能监控到D盘中所有子目录,只要有1.txt文件都能被监视到

2、Filter

该属性用于设置监控哪种类型的文件,有三种情况,监控所有类型文件、监控某一种类型文件、监控某一个具体文件,分别如下:

2.1 监控所有类型的文件

*.* 就是监控所有类型的文件
参考代码如下:

 fileSystemWatcher1.Filter = "*.*";//监控所有类型的文件

2.2 监控某种类型的文件

*.txt 监控所有以txt为后缀的文件
*.csv 监控所有以csv为后缀的文件
参考代码如下:

 fileSystemWatcher1.Filter = "*.txt";//监控txt类型的文件

2.3 监控某个文件

1.txt 监控文件1.txt
参考代码如下:

   fileSystemWatcher1.Filter = "1.txt";//监控1.txt

3、IncludeSubdirectories

当需要监控Path属性中指的路径的子目录时,将该属性设置为true

4、EnableRaisingEvents

指示是否启用该组件,如果为false,则所有的事件都失效了

5、NotifyFilter

设置文件的哪些属性的变动会触发Changed事件,同时监控多个属性变动可以按“或”组合。(默认值为 NotifyFilter.LastWrite | NotifyFilter.FileName | NotifyFilter.DirectoryName 组合),总共有8种情况,如下:

Attributes
文件或文件夹的属性。

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

DirectoryName
目录名。

FileName
文件的名称。

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

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

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

Size
文件或文件夹的大小。

二、事件

下面的代码分别是Changed事件、Created事件、Deleted事件、Renamed事件的代码,在代码中获取了文件的全路径、文件名、触发的事件类型

 private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
        {
            Console.WriteLine($"FullPath:{e.FullPath}");//获取文件的全路径
            Console.WriteLine($"Name:{e.Name}");//获取文件名
            Console.WriteLine($"ChangeType:{e.ChangeType}");//获取事件类型这里是Changed事件
        }

        private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
        {
            Console.WriteLine($"FullPath:{e.FullPath}");//获取文件的全路径
            Console.WriteLine($"Name:{e.Name}");//获取文件名
            Console.WriteLine($"ChangeType:{e.ChangeType}");//获取事件类型这里是Created事件
        }

        private void fileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e)
        {
            Console.WriteLine($"FullPath:{e.FullPath}");//获取文件的全路径
            Console.WriteLine($"Name:{e.Name}");//获取文件名
            Console.WriteLine($"ChangeType:{e.ChangeType}");//获取事件类型这里是Deleted事件
        }

        private void fileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e)
        {
            Console.WriteLine($"FullPath:{e.FullPath}");//获取文件的全路径
            Console.WriteLine($"Name:{e.Name}");//获取文件名
            Console.WriteLine($"ChangeType:{e.ChangeType}");//获取事件类型这里是Renamed事件
        }

1、Changed

文件内容被更改,文件夹名被重命名,这两种情况下触发,但是这两种情况下Filter的属性设置不同,如下:

1.1 文件被更改时触发

filter属性可以任意设置

1.2 目录被更改时触发

如果想要目录被更改触发,则Filter 属性必须设置为*.*,代码如下:

  fileSystemWatcher1.Filter = "*.*";//监控1.txt文件

2、Created

新建一个文件,新建一个文件夹都会触发,但是这两种情况下Filter的属性设置不同,如下:

2.1 新建文件触发

filter属性可以任意设置

2.2 新建文件夹触发

如果想要新建文件夹触发,则Filter 属性必须设置为*.*,代码如下:

  fileSystemWatcher1.Filter = "*.*";//监控1.txt文件

3、Deleted

删除一个文件,删除一个文件夹都会触发,但是这两种情况下Filter的属性设置不同,如下:

3.1删除文件触发

filter属性可以任意设置

3.2 删除文件夹触发

如果想要删除文件夹触发,则Filter 属性必须设置为*.*,代码如下:

  fileSystemWatcher1.Filter = "*.*";//监控1.txt文件

4、Renamed

重命名一个文件,重命名一个文件夹都会触发,但是这两种情况下Filter的属性设置不同,如下:

4.1 重命名文件触发

filter属性可以任意设置

4.2 重命名文件夹触发

如果想要删除文件夹触发,则Filter 属性必须设置为*.*,代码如下:

  fileSystemWatcher1.Filter = "*.*";//监控1.txt文件
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

c#上位机

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

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

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

打赏作者

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

抵扣说明:

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

余额充值