共计 2663 个字符,预计需要花费 7 分钟才能阅读完成。
开局一张图,在 System.IO
下的 FileSystemWatcher 罕用于监督文件系统的变更,当文件系统中的文件或者文件夹被批改会主动触发相应的回调事件。
为了可能理解 FileSystemWatcher 是怎么运作的,你能够指定一个被监督的文件夹,当被监督的文件夹批改后,大略会触发如下的一些事件。
- Changed: 当文件或者文件夹曾经实现批改时触发此事件
- Created:当文件或者文件夹曾经胜利创立触发此事件
- Deleted:当文件或者文件夹曾经胜利删除触发此事件
- Error:当变更的过程中产生谬误触发此事件。
- Renamed:当文件或者文件夹曾经胜利被重命名时触发此事件
创立一个简略的 file 监督
接下来咱们在 Visual Studio 中创立一个 Console 程序,用来理解如何进行文件监督,不过倡议把 Console 部署成 Windows Service,这样不便在零碎中常驻监控,一旦被监督的门路产生变更就会主动发出通知事件。
该说的都说了,接下来一起钻研代码吧。
static void Main(string[] args)
{
string path = @"D:\IDG";
MonitorDirectory(path);
Console.ReadKey();}
上面的代码片段展现了 MonitorDirectory 办法的外部逻辑,这个办法可用于监督指定的文件夹并且当文件夹变更时触发事件,能够看到 文件夹门路
是通过参数传进去的。
private static void MonitorDirectory(string path)
{FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = path;
fileSystemWatcher.Created += FileSystemWatcher_Created;
fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;
fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;
fileSystemWatcher.EnableRaisingEvents = true;
}
能够着重理解一下下面的 event 是如何被灌入的,而且我还写了一句 fileSystemWatcher.EnableRaisingEvents = true
, 这是什么意思呢?示意以后的门路正式开始被监控,一旦监控的门路呈现变更,FileSystemWatcher 中的指定事件将会被触发。
扫一下下面定义的各个 event 事件,别离都定义了该事件的处理函数,比如说:FileSystemWatcher_Created
,FileSystemWatcher_Renamed
,FileSystemWatcher_Deleted
,不言而喻触发某一个事件就会触发它的事件处理函数,对吧,具体代码如下:
private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{Console.WriteLine("File created: {0}", e.Name);
}
private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)
{Console.WriteLine("File renamed: {0}", e.Name);
}
private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)
{Console.WriteLine("File deleted: {0}", e.Name);
}
上面是残缺的可供参考的代码清单。
using System;
using System.IO;
namespace IDGFileSystemWatcher
{
class Program
{static void Main(string[] args)
{
string path = @"D:\IDG";
MonitorDirectory(path);
Console.ReadKey();}
private static void MonitorDirectory(string path)
{FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = path;
fileSystemWatcher.Created += FileSystemWatcher_Created;
fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;
fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;
fileSystemWatcher.EnableRaisingEvents = true;
}
private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{Console.WriteLine("File created: {0}", e.Name);
}
private static void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)
{Console.WriteLine("File renamed: {0}", e.Name);
}
private static void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)
{Console.WriteLine("File deleted: {0}", e.Name);
}
}
}
假如 IDG
文件夹是在 E 盘内,接下来把 Console 运行起来,而后在 IDG 文件夹内创立一个新文件,不出意外的话,你会察看到这个新建的文件名将会呈现在 控制台 上,阐明 FileSystemWatcher_Created 被胜利触发,参考下图:
译文链接:https://www.infoworld.com/art…
更多高质量干货:参见我的 GitHub: csharptranslate