概述:
FileSystemWatcher是一个用于监视系统文件和目录更改的类。它可以用于监视文件的创建,修改,删除和重命名等操作,并提供一个事件机制,用于处理文件更改事件。
使用方法:
1. 创建一个 FileSystemWatcher 实例
使用 FileSystemWatcher 类之前,必须先创建一个 FileSystemWatcher 类的实例。创建 FileSystemWatcher 类实例的最常见代码如下:
```c#
using System.IO;
FileSystemWatcher watcher = new FileSystemWatcher();
```
2. 设置监视的文件或目录
在创建 FileSystemWatcher 类实例后,必须指定要监视的文件或目录。可以通过以下属性指定:
```c#
watcher.Path = @"C:\Users\username\Desktop"; // 需要监视的文件夹
watcher.Filter = "*.txt"; // 需要监视的文件类型,可以是任意字符串。例如:*.txt 测试.txt 等。
```
其中,Path属性指定要监视的文件或目录的路径,可以是本地路径或网络路径。Filter属性指定要监视的文件类型,使用通配符*表示匹配任意字符,使用?表示匹配一个字符。
3. 设置监视文件的更改类型
FileSystemWatcher类可以监视以下四种更改类型:
- 文件的创建
- 文件的修改
- 文件的删除
- 文件的重命名
设置监听方式如下:
```c#
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.CreationTime | NotifyFilters.FileName | NotifyFilters.DirectoryName;
```
NotifyFilter属性用于指定要监视的更改类型。在以上代码中,通过分配位掩码来组合多个 NotifyFilters 枚举值,使用的则是(文件的创建、文件的修改、文件名更改以及目录名更改)。
4. 注册 FileSystemWatcher 类的事件
FileSystemWatcher 类提供了以下事件来处理文件更改:
- Created:文件或目录被创建。
- Changed:文件或目录被更改。
- Deleted:文件或目录被删除。
- Renamed:文件或目录被重命名。
在 FileSystemWatcher 类的实例中注册这些事件的代码如下:
```c#
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnCreated);
watcher.Deleted += new FileSystemEventHandler(OnDeleted);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
private static void OnChanged(object source, FileSystemEventArgs e)
{
// 在文件更改事件被触发时调用
}
private static void OnCreated(object source, FileSystemEventArgs e)
{
// 在文件创建事件被触发时调用
}
private static void OnDeleted(object source, FileSystemEventArgs e)
{
// 在文件删除事件被触发时调用
}
private static void OnRenamed(object source, RenamedEventArgs e)
{
// 在文件重命名事件被触发时调用
}
```
需要注意的是,这些事件是异步的,也就是说它们将在文件更改发生后异步触发,而不是立即触发,所以处理事件时需要小心。
5. 启动 FileSystemWatcher 类实例
注册了 FileSystemWatcher 类实例的事件后,就可以启动 FileSystemWatcher 类了。使用 FileSystemWatcher 类的 BeginWatching() 方法来启动 FileSystemWatcher,如下所示:
```c#
watcher.EnableRaisingEvents = true;
```
EnableRaisingEvents 属性用于启用或禁用 FileSystemWatcher 类。启动 FileSystemWatcher 后会立即开始监视系统文件和目录的变化。
案例说明:
假设我们需要监视一个文件夹,当其中有任何txt文件被创建、修改、删除或者重命名时,我们需要记录下来时间和文件名。
```c#
using System;
using System.IO;
namespace FileSystemWatcherExample
{
class Program
{
private static string folderPath = @"C:\Users\username\Desktop\test\";
static void Main(string[] args)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = folderPath;
watcher.Filter = "*.txt";
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.CreationTime | NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Changed += OnChanged;
watcher.Created += OnCreated;
watcher.Deleted += OnDeleted;
watcher.Renamed += OnRenamed;
watcher.EnableRaisingEvents = true;
Console.WriteLine("监视 " + folderPath + "中的 txt 文件,按任意键退出。");
Console.ReadKey();
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"{DateTime.Now}:文件 {e.FullPath} 被修改");
}
private static void OnCreated(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"{DateTime.Now}:文件 {e.FullPath} 被创建");
}
private static void OnDeleted(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"{DateTime.Now}:文件 {e.FullPath} 被删除");
}
private static void OnRenamed(object sender, RenamedEventArgs e)
{
Console.WriteLine($"{DateTime.Now}:文件 {e.OldFullPath} 重命名为 {e.FullPath}");
}
}
}
```
在运行程序后,在文件夹中创建修改或删除txt文件,或重命名时,都会触发相应的事件。运行结果如下:
```
监视 C:\Users\username\Desktop\test\ 中的 txt 文件,按任意键退出。
2022/4/4 22:13:43: 文件 C:\Users\username\Desktop\test\test.txt 被创建
2022/4/4 22:13:54: 文件 C:\Users\username\Desktop\test\test.txt 被修改
2022/4/4 22:14:05: 文件 C:\Users\username\Desktop\test\test.txt 被删除
2022/4/4 22:14:25: 文件 C:\Users\username\Desktop\test\测试.txt 重命名为 C:\Users\username\Desktop\test\重命名.txt
```
总结:
FileSystemWatcher是一个非常有用的类,可以用来监视系统文件和目录的变化。使用时必须先创建一个FileSystemWatcher实例,并通过相关属性指定要监视的文件或目录、要监视的更改类型以及要注册的事件。最后,开启FileSystemWatcher并在相应事件中处理指定的操作即可。
壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。
我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复