10.8 FileSystemWatcher(文件监视)组件
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
FileSystemWatcher组件监视文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。FileSystemWatcher并不会监视指定目录自身的更改。
可以通过从工具箱向窗体拖放FileSystemWatcher组件或者直接代码建立FileSystemWatcher对象来使用该组件。
FileSystemWatcher常用属性:
- EnableRaisingEvents:指示是否启用此组件。
- Filter:用于确定在目录中监视哪些文件的筛选器字符串。此属性中可以使用通配符,“*”表示多个字符,“?”表示1个字符,例如:*.*表示所有文件:*.txt表示后缀为txt的文件;Alarm*.wav表示以Alarm开头、后缀为wav的文件;11.png表示仅11.png文件。
- IncludeSubdirectories:指示是否应监视指定路径中的子目录。
- InternalBufferSize:内部缓冲区的大小(以字节为单位)。
- NotifyFilter:要监视的更改的类型。这是一个NotifyFilters枚举,可通过Or来组合此枚举的成员以监视多种类型的更改,默认值为LastWrite、FileName和DirectoryName的组合。NotifyFilters枚举包含以下成员:
- Attributes:文件或文件夹的特性。
- CreationTime:文件或文件夹的创建时间。
- DirectoryName:目录名。
- FileName:文件名。
- LastAccess 文件或文件夹上一次打开的日期。
- LastWrite:上一次向文件或文件夹写入内容的日期。
- Security:文件或文件夹的安全设置。
- Size:文件或文件夹的大小。
- Path:要监视的目录的路径。
注意:必须设置Path属性,并将EnableRaisingEvents属性设置为True,才能实现文件监控,引发相应事件。
FileSystemWatcher常用事件:
- Changed:当指定Path中的文件或目录的大小、系统特性、最近写入时间、最近访问时间或安全权限进行更改时时发生。
- Created:在指定Path中创建文件和目录时发生。
- Deleted:删除指定Path中的文件或目录时发生。
- Renamed:重命名指定Path中的文件或目录时发生。
- Error:当FileSystemWatcher的实例无法继续监视更改或内部缓冲区溢出时发生。
以上事件中,Changed、Created、Deleted事件参数是FileSystemEventArgs类,Renamed事件参数是FileSystemEventArgs类;Error事件参数是ErrorEventArgs类,需要注意的是,该事件并没有在【属性】窗口的事件里面,需要手动增加。
1、FileSystemEventArgs类常用属性:
- ChangeType:获取所发生的目录事件的类型。这是一个WatcherChangeTypes枚举,包含以下成员:
All:文件或文件夹的创建、删除、更改或重命名。
Changed:文件或文件夹的更改。 更改的类型包括大小、特性、安全设置、最近写入时间和最近访问时间方面的更改。
Created:文件或文件夹的创建。
Deleted:文件或文件夹的删除。
Renamed:文件或文件夹的重命名。
- FullPath:获取受影响的文件或目录的完全限定的路径。
- Name:获取受影响的文件或目录的名称。
2、RenamedEventArgs类继承于FileSystemEventArgs类,比父类增加了2个常用属性:
- OldFullPath:获取受影响的文件或目录的前一个完全限定的路径。
- OldName:获取受影响的文件或目录的旧名称。
3、ErrorEventArgs类提供了一个方法:
- GetException:获取表示已发生的错误信息。
【例 10.33】【项目:code10-033】监视目录文件系统更改。
private void btnCommand_Click(object sender, EventArgs e)
{
//设置监视目录
fileSystemWatcher1.Path = txtFolder.Text;
//设置监视文件
fileSystemWatcher1.Filter = txtFilter.Text;
//设置监视子目录
fileSystemWatcher1.IncludeSubdirectories = true;
//设置监视类型
fileSystemWatcher1.NotifyFilter = System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.DirectoryName | System.IO.NotifyFilters.LastWrite;
if( btnCommand.Text == "开始监视")
{
fileSystemWatcher1.EnableRaisingEvents = true;
btnCommand.Text = "停止监视";
}
else
{
fileSystemWatcher1.EnableRaisingEvents = false;
btnCommand.Text = "开始监视";
}
fileSystemWatcher1.Error += FileSystemWatcher1_Error;
}
//文件或文件夹发生改变
private void FileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
{
lstWatchInfo.Items.Add(e.Name + "改变");
}
//文件或文件夹创建
private void FileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
lstWatchInfo.Items.Add(e.Name + "创建");
}
//文件或文件夹删除
private void FileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e)
{
lstWatchInfo.Items.Add(e.Name + "删除");
}
//文件或文件夹重命名
private void FileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e)
{
lstWatchInfo.Items.Add(e.OldName + "更改为:" + e.Name);
}
//发生错误
private void FileSystemWatcher1_Error(object sender, System.IO.ErrorEventArgs e)
{
lstWatchInfo.Items.Add(e.GetException().Message);
}
运行结果如下图所示:
图10-21 获得lessons目录改变信息
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录