博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用 C# 中的 FileSystemWatcher 制作一个文件夹监控小工具
阅读量:4035 次
发布时间:2019-05-24

本文共 3501 字,大约阅读时间需要 11 分钟。

利用 C# 中的 FileSystemWatcher 制作一个文件夹监控小工具

独立观察员 2020 年 12 月 26 日

 

前一段看到微信公众号 “码农读书” 上发了一篇文章《》(翻译自:https://www.infoworld.com/article/3185447/how-to-work-with-filesystemwatcher-in-c.html ),其中简述了使用 FileSystemWatcher 进行文件系统变更监测的方法,本人受此启发,决定制作一个文件夹内变动监控的小工具,当作练手和自用。目前该工具已制作完成,故发文分享给大家。

 

功能比较简单,运行程序后,点击 “选择文件夹” 按钮选择想要监控的文件夹,然后点击 “开始监控文件变动” 即可。可以检测 文件夹 / 文件 的创建、删除、修改、重命名,然后在信息窗中输出相关信息。如果取消勾选 “是否显示完全路径”,则输出的信息中将不包含选择的 “文件夹路径” 部分,也就是显示的是相对路径。如果取消勾选 “是否监控子文件夹”,则程序将不监控子文件夹内的变动情况。

 

保存配置按钮可进行保存如下信息,下次打开程序会恢复保存的状态:

 

关键代码如下(文末会给出代码仓库地址):

#region 文件夹监控private FileSystemWatcher _FileSystemWatcher = new FileSystemWatcher();// 参考:https://www.infoworld.com/article/3185447/how-to-work-with-filesystemwatcher-in-c.html/// /// 开始监控目录/// ///  目录路径 ///  是否包括子目录 private async void MonitorDirectory(string path, bool isIncludeSubDir = true){    _FileSystemWatcher.EnableRaisingEvents = false;    _FileSystemWatcher = new FileSystemWatcher();    _FileSystemWatcher.Path = path;    _FileSystemWatcher.IncludeSubdirectories = isIncludeSubDir;    _FileSystemWatcher.Created += FileSystemWatcher_Created;    _FileSystemWatcher.Renamed += FileSystemWatcher_Renamed;    _FileSystemWatcher.Deleted += FileSystemWatcher_Deleted;    _FileSystemWatcher.Changed += FileSystemWatcher_Changed;    // 开始监控    _FileSystemWatcher.EnableRaisingEvents = true;    await ConfirmBoxHelper.ShowMessage(DialogVm, $" 已开启监控:[{Configs.FolderPath}]");}private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e){    Console.WriteLine($"【{GetPathType(e.FullPath)} 更改】{GetPath(e)}");}private void FileSystemWatcher_Created(object sender, FileSystemEventArgs e){    Console.WriteLine($"【{GetPathType(e.FullPath)} 创建】{GetPath(e)}");}private void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e){    Console.WriteLine($"【{GetPathType(e.FullPath)} 重命名】{GetOldPath((RenamedEventArgs)e)} --> {GetPath(e)}");}private void FileSystemWatcher_Deleted(object sender, FileSystemEventArgs e){    Console.WriteLine($"【{GetPathType(e.FullPath)} 删除】{GetPath(e)}");}/// /// 获取变动的路径的显示字符串/// private string GetPath(FileSystemEventArgs e){    if (Configs.IsShowFullPath)    {        return e.FullPath;    }    return e.Name;}/// /// 获取原先路径的显示字符串/// private string GetOldPath(RenamedEventArgs e){    if (Configs.IsShowFullPath)    {        return e.OldFullPath;    }    return e.OldName;}#endregion#region 判断是文件还是文件夹/// /// 获取路径类型(判断是文件还是文件夹)/// ///  路径 /// 
PathTypeEnum
public static PathTypeEnum GetPathType(string path){ if (File.Exists(path)) { return PathTypeEnum. 文件; } else if (Directory.Exists(path)) { return PathTypeEnum. 文件夹; } else { return PathTypeEnum. 不存在; }}/// /// 路径类型枚举/// public enum PathTypeEnum{ 文件,文件夹,不存在}#endregion

 

值得注意的就是,FileSystemWatcher 开启和关闭监控是通过 EnableRaisingEvents 这个 bool 属性进行控制的。然后就是主要的四个事件,增、删、改、重命名,分别指定好回调方法:

_FileSystemWatcher.Created += FileSystemWatcher_Created;_FileSystemWatcher.Renamed += FileSystemWatcher_Renamed;_FileSystemWatcher.Deleted += FileSystemWatcher_Deleted;_FileSystemWatcher.Changed += FileSystemWatcher_Changed;

 

还有一点就是,其它事件的参数都是 FileSystemEventArgs 类型,而重命名事件的独有参数是 RenamedEventArgs 类型,这个是前者的子类,多了旧的文件名和路径等信息。

 

程序和代码都展示完了,又到了和大家说再见的时刻了,在此附上代码地址和另一篇参考文章吧:

代码地址:https://gitee.com/dlgcy/DLGCY.FilesWatcher

发行版地址:https://gitee.com/dlgcy/DLGCY.FilesWatcher/releases

又一参考:《FileSystemWatcher 用法详解》(https://blog.csdn.net/hwt0101/article/details/8469285)(里面也有个监控软件,不过我没下载,大家可以试试)

待更新:目前信息窗口信息多的话会触发 “灭霸模式”,后面考虑加个开关。 

 

好了,就到这里吧,谢谢阅读。

你可能感兴趣的文章
Decode Ways
查看>>
Plus One
查看>>
Subsets
查看>>
Subsets II
查看>>
Maximum Subarray
查看>>
Add Binary
查看>>
Rotate List
查看>>
Search in Rotated Sorted Array
查看>>
Insertion Sort List
查看>>
Partition List
查看>>
Climbing Stairs
查看>>
Minimum Path Sum
查看>>
Search in Rotated Sorted Array II
查看>>
Sqrt(x)
查看>>
Search for a Range
查看>>
Valid Palindrome
查看>>
Word Break
查看>>
Surrounded Regions
查看>>
Largest Rectangle in Histogram
查看>>
免费馅饼
查看>>