文章目录
前言
我们在软件开发中有时候需要监控某个目录或者文件被更改了或者重命名了或者删除了,或者新建了,当有这种需求的时候,就可以使用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文件