在开发各种应用程序时,我们经常需要对文件系统中的文件或文件夹进行实时监测,以便在文件内容改变、文件被创建或删除时能够及时做出反应。在 c# 中,system.io.filesystemwatcher 类为我们提供了这样一个强大的功能。
一、引入 filesystemwatcher 类
首先,在项目中引入 system.io 命名空间,这是使用 filesystemwatcher 类的前提:
using system.io;
二、创建并配置 filesystemwatcher 实例
下面是一个简单的例子,展示了如何创建一个 filesystemwatcher 实例并设置其监视的目录、事件类型以及事件处理函数:
public class filefoldermonitor
{
private filesystemwatcher _filewatcher;
public void startmonitoring(string directorypath)
{
// 创建 filesystemwatcher 实例
_filewatcher = new filesystemwatcher();
// 设置要监视的目录路径
_filewatcher.path = directorypath;
// 设置要监视的更改类型(例如:修改、创建、删除)
_filewatcher.notifyfilter = notifyfilters.lastwrite | notifyfilters.filename | notifyfilters.directoryname;
// 添加事件处理程序
_filewatcher.changed += onchanged;
_filewatcher.created += onchanged;
_filewatcher.deleted += onchanged;
_filewatcher.renamed += onrenamed;
// 开启事件监听
_filewatcher.enableraisingevents = true;
console.writeline($"已开始监视文件夹: {directorypath}");
}
private void onchanged(object source, filesystemeventargs e)
{
console.writeline($"文件或文件夹发生变更: {e.fullpath},事件类型: {e.changetype}");
}
private void onrenamed(object source, renamedeventargs e)
{
console.writeline($"文件或文件夹被重命名: 旧路径 {e.oldfullpath} -> 新路径 {e.fullpath}");
}
public void stopmonitoring()
{
if (_filewatcher != null)
{
// 停止引发事件
_filewatcher.enableraisingevents = false;
// 清理资源
_filewatcher.dispose();
_filewatcher = null;
console.writeline("已停止监视文件夹");
}
}
}
三、使用与注意事项
在上述代码中,我们通过调用 startmonitoring 方法启动了对指定目录的监视,并且在文件或子目录发生变化时触发相应的事件处理器。
notifyfilter 属性用来定义需要监听的具体事件类型,如最后写入时间、文件名和目录名的变化等。
changed、created、deleted 和 renamed 四个事件分别对应于文件或文件夹的内容更改、新建、删除和重命名操作。
注意事项:
filesystemwatcher 类并不能保证事件的即时性或顺序性,尤其是在大量并发文件操作的情况下,可能会合并或延迟触发事件。
使用 filesystemwatcher 时应确保合理处理资源,特别是当不再需要监视时,应及时调用 dispose 方法释放资源。
总结来说,system.io.filesystemwatcher 是实现文件系统实时监控的强大工具,只需简单配置和事件处理,就能让我们的应用程序具备灵敏响应文件系统变化的能力。
四、课外探索,弹出文件选择框
public static string selectfolder(string description = "请选择一个文件夹:", environment.specialfolder rootfolder = environment.specialfolder.mycomputer)
{
using (folderbrowserdialog folderdialog = new folderbrowserdialog())
{
folderdialog.description = description;
folderdialog.rootfolder = rootfolder;
if (folderdialog.showdialog() == dialogresult.ok)
{
return folderdialog.selectedpath;
}
}
return string.empty;
}
五、调用示例
参数调用:
string selectedfolder = selectfolder("请选择一个保存位置:", environment.specialfolder.desktop);
或者使用默认参数,直接选择"我的电脑"作为根目录
string mycomputerselectedfolder = selectfolder();
合并调用方法要加空过滤避免报错
string selectedfolderpath = selectfolder();
if (!string.isnullorempty(selectedfolderpath))
{
startmonitoring(selectedfolderpath);
}到此这篇关于c#实现实时监控文件夹变化的文章就介绍到这了,更多相关c#监控文件夹内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论