一、FileSystemWatcher常用属性
FileSystemWatcher常用于监视文件系统的变更,当文件系统中的文件或者文件夹被修改会自动触发相应的回调事件。
1、常用事件
Changed: 当文件或者文件夹已经完成修改时触发此事件
Created:当文件或者文件夹已经成功创建触发此事件
Deleted:当文件或者文件夹已经成功删除触发此事件
Error:当变更的过程中发生错误触发此事件。
Renamed:当文件或者文件夹已经成功被重命名时触发此事件
2、常用基本属性
Path :设置要监视的目录的路径。
IncludeSubdirectories :设置是否级联监视指定路径中的子目录。
Filter :设置筛选字符串,用于确定在目录中监视哪些类型的文件。
NotifyFilter :设置文件的哪些属性的变动会触发 Changed事件,同时监控多个属性变动可以按“或”组合。(默认值为 NotifyFilter.LastWrite | NotifyFilter.FileName | NotifyFilter.DirectoryName 组合)
子项:Attributes – 文件或文件夹的属性。
CreationTime – 文件或文件夹的创建时间。
DirectoryName – 目录名。(常用)
FileName – 文件名。 (常用)
LastAccess – 文件或文件夹上一次打开的日期。
LastWrite – 上一次向文件或文件夹写入内容的日期。
Security – 文件或文件夹的安全设置。
Size – 文件或文件夹的大小。 (常用)
EnableRaisingEvents :设置是否开始监控。(默认为false)
二、一个简单的 file 监视程序
代码如下(示例):
static void Main(string[] args) { string path = @"D:\Data"; MonitorDirectory(path,"*.*"); Console.ReadKey(); Console.WriteLine("按q退出!"); while (Console.Read() != 'q') ; }监听方法:
private static void MonitorDirectory(string path, string filter) { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(); fileSystemWatcher.Path = path; fileSystemWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName |NotifyFilters.DirectoryName; //文件类型,支持通配符,“*.txt”只监视文本文件 fileSystemWatcher.Filter = filter; // 监控的文件格式 watch.IncludeSubdirectories = true; // 监控子目录 fileSystemWatcher.Changed += new FileSystemEventHandler(OnProcess); fileSystemWatcher.Created += new FileSystemEventHandler(OnProcess); fileSystemWatcher.Renamed += new RenamedEventHandler(OnRenamed); fileSystemWatcher.Deleted += new FileSystemEventHandler(OnProcess); //表示当前的路径正式开始被监控,一旦监控的路径出现变更,FileSystemWatcher 中的指定事件将会被触发。 fileSystemWatcher.EnableRaisingEvents = true; } private static void OnProcess(object source, FileSystemEventArgs e) { if (e.ChangeType == WatcherChangeTypes.Created) { OnCreated(source, e); } else if (e.ChangeType == WatcherChangeTypes.Changed) { OnChanged(source, e); } else if (e.ChangeType == WatcherChangeTypes.Deleted) { OnDeleted(source, e); } } private static void OnCreated(object source, FileSystemEventArgs e) { Console.WriteLine("File created: {0} {1} {2}", e.ChangeType, e.FullPath, e.Name); } private static void OnChanged(object source, FileSystemEventArgs e) { Console.WriteLine("File changed: {0} {1} {2}", e.ChangeType, e.FullPath, e.Name); } private static void OnDeleted(object source, FileSystemEventArgs e) { Console.WriteLine("File deleted: {0} {1} {2}", e.ChangeType, e.FullPath, e.Name); } private static void OnRenamed(object source, FileSystemEventArgs e) { Console.WriteLine("File renamed: {0} {1} {2}", e.ChangeType, e.FullPath, e.Name); }