对于一个需要管理本地文件的应用来说,监控文件的运行及修改状态十分重要,在运行中,我们如何知道文件的基本属性的变化?


C#为我们提供了一个文件监控类(FileSystemWatcher),它定义了几个文件操作的事件,当我们对文件操作时便会引起这些事件,通过订阅这些事件,并添加自己的处理程序可实现对文件的监控。

FileSystemWatcher的属性

属性 说明
path 设置要监控的目录或者文件
NotifyFilter 它是NotifyFilters枚举值的组合,NotifyFilters枚举要监控的内容,它的枚举值是要监控的文件或文件夹属性。它的枚举值有,Attributes、CreationTime、DirectoryName、FileName、LastAccess等等。若有多个组合可使用二元运算符OR合并这些值。
Filter 指定要监控的文件过滤,例如,*.txt

用FileSystemWatcher监控文件的Changed、Created、Deleted、Renamed事件,当文件引发上述事件后,便通过自定义的处理程序显示改变情况。(本例使用wpf应用程序)

  1. xaml代码:
<Grid><Grid.RowDefinitions><RowDefinition Height="1*"/><RowDefinition Height="1*"/><RowDefinition Height="8*"/></Grid.RowDefinitions><StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"><TextBox x:Name="tb1" Height="30" Width="300" TextChanged="Tb1_TextChanged"/><Button x:Name="btn1" Content="Open File" Margin="30 0 0 0" Click="Open_Click"/></StackPanel><Button x:Name="btn2" Grid.Row="1" Height="30" Width="200" Content="Watch!" IsEnabled="False" Click="Watch_Click"/><ListBox x:Name="lb1" Grid.Row="2" Margin="10"/>
</Grid>

效果截图

2.为ListBox添加消息

private void AddMessage(string message)
{Dispatcher.BeginInvoke(new Action(() => lb1.Items.Insert(0, message)));
}

3.实例化FileSystemWatcher并添加需监控属性的事件。

private FileSystemWatcher watcher;
public MainWindow()
{InitializeComponent();this.DataContext = this;watcher = new FileSystemWatcher();watcher.Changed += (s, e) => AddMessage(e.FullPath+" had changed");watcher.Deleted += (s, e) => AddMessage(e.FullPath + " had Deleted");watcher.Renamed += (s, e) => AddMessage(e.OldFullPath + " had renamed " + e.FullPath);watcher.Created += (s, e) => AddMessage(e.FullPath + "had created");
}

本例中订阅了四个事件,Changed文件修改事件,Deleted文件删除事件,Renamed重命名事件,Created文件创建事件。

4. 打开文件添加窗口

private void Open_Click(object sender, RoutedEventArgs e)
{OpenFileDialog openFile = new OpenFileDialog();openFile.Filter = "(*.*)|*.*";if(openFile.ShowDialog()==true){this.tb1.Text = openFile.FileName;}
}

OpenFileDialog的ShowDialog会返回一个bool值,当选择好文件后会返回true,当取消此窗口后会返回false。

5.判断Watch按键是否可用

private void Tb1_TextChanged(object sender, TextChangedEventArgs e)
{btn2.IsEnabled = !string.IsNullOrEmpty(this.tb1.Text);
}

当路径框不为空时,watch按钮可用。

6.开始监控文件

private void Watch_Click(object sender, RoutedEventArgs e)
{watcher.Path = System.IO.Path.GetDirectoryName(this.tb1.Text);watcher.Filter = System.IO.Path.GetFileName(this.tb1.Text);watcher.NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.LastWrite| NotifyFilters.FileName | NotifyFilters.Deleted;AddMessage("Watching..." + this.tb1);watcher.EnableRaisingEvents = true;
}
  • EnableRaisingEvents属性设置为true时表示开始监控。
  • Path属性指定要监控的目录,通过Path的GetDirectoryName方法可以从路径字符串中获取路径。
  • Filter指定要过滤的文件,通过Path的GetFileName获取要筛选的文件,
    可指定Filter为(.)即为监控整个目录。

7.运行

创建文件

删除文件


感谢观看

C# FileSystemWatcher文件监控相关推荐

  1. 详解C#使用FileSystemWatcher文件监控对象的感受

    ** 详解C#使用FileSystemWatcher文件监控对象的感受 ** 本文和大家一起来学习分享一下C#使用FileSystemWatcher文件监控对象,希望对你有帮助. 最近在项目中有这么个 ...

  2. C# FileSystemWatcher文件监控实例

    FileSystemWatcher 可以使用FileSystemWatcher组件监视文件系统,并对文件系统的改变作出反应.通过使用FileSystemWatcher组件,在特定的文件或目录被创建.修 ...

  3. 使用文件监控对象FileSystemWatcher实现数据同步

    使用文件监控对象FileSystemWatcher实现数据同步 原文 使用文件监控对象FileSystemWatcher实现数据同步 最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文 ...

  4. 文件监控之FileSystemWatcher(c++)

    文件监控之FileSystemWatcher(c++) 为了监控web程序的静态文件是否被恶意改动,所以学习了一下FileSystemWatcher  类对文件的监控,由于还在初级阶段,这里只贴一下关 ...

  5. C# FileSystemWatcher 实时监控文件的增加、修改、重命名和删除实例

    好多时候,我们都需要知道某些目录下的文件什么时候被修改.删除过等,如果能用miniFilter驱动过滤来做的话当然是最好不过了,这是内核级别的,当然也比较复杂.如果只是简单的记录就没必要用驱动过滤级别 ...

  6. 谈谈C#文件监控对象FileSystemWatcher使用感受

    谈谈C#文件监控对象FileSystemWatcher使用感受 2017年07月07日 14:52:32 savagelin 阅读数:3530 最近在项目中有这么个需求,就是得去实时获取某个在无规律改 ...

  7. C# FileSystemWatcher 多文件夹、多文件类型文件监控增加、修改、重命名和删除实例

    在上一次讲过了FileSystemWatcher 实时监控文件的增加.修改.重命名和删除,具体怎么实现就不再去阐述,参考如下文 C# FileSystemWatcher 实时监控文件的增加.修改.重命 ...

  8. 使用.NET FileSystemWatcher对象监控磁盘文件目录的改变

    原文(英文):http://www.techrepublic.com/article/use-the-net-filesystemwatcher-object-to-monitor-directory ...

  9. python实时监控文件目录_c#教程之c#使用filesystemwatcher实时监控文件目录的

    /// /// 文件监控类,用于监控指定目录下文件以及文件夹的变化 /// public class FileWatcher { private FileSystemWatcher _watcher ...

最新文章

  1. 2021年上海市高考成绩查询,2021上海市地区高考成绩排名查询,上海市高考各高中成绩喜报榜单...
  2. Android Load Picture Asynchronously
  3. 【知识图谱】知识融合
  4. Web API Help Page Install WebApiTestClient 简单的测试客户端
  5. Spring Security——关闭未认证时重定向(302)到登录页面(loginPage)
  6. VTK:结构化网格之StructuredGrid
  7. 软件项目组织管理(二、三)项目管理与信息技术环境、项目管理过程组
  8. python怎么做软件界面_python – 如何自定义桌面应用程序的标题栏和窗口
  9. 如何从wireshark 抓包中的RTP导出 H.264 PAYLOAD,变成可用暴风直接播放的H264 裸码流文件
  10. python爬虫教材推荐 豆瓣_学习python爬虫推荐书籍
  11. git lab提交记录中有 merge branch ‘xxx‘ of of http:xxx into xxx
  12. 大数据学习路线详解,零基础学大数据学习路线
  13. 2015-12-12 java hibernate 微信表情昵称保存
  14. 【vue-清除默认样式-完结】
  15. 大学生学计算机打字速度,浅谈提高小学生计算机打字速度
  16. Activiti7.0 EL NullPoint问题
  17. 总结十二:管理经验法则和名言
  18. vmware使用u盘安装系统
  19. SAP中采购订单中的统计型字段分析
  20. ssh连接的时候,出现“THE AUTHENTICITY OF HOST XXX CAN’T BE ESTABLISHED”警告

热门文章

  1. 《鸟哥linux私房菜》读书笔记
  2. 数商云SCM供应链协同系统招标功能亮点|构建数字化采购体系降低汽车零部件成本
  3. Android L上锁屏界面滑动不解锁
  4. Android向系统日历添加事件提醒
  5. 9.19上海交大PMP每日一题
  6. 中国新材料产业园区投资分析及竞争战略咨询报告2022年版
  7. 考研政治那些事儿_一战上岸海南大学电子信息(软件工程)
  8. niuke online编程python常用输入
  9. Arduino 串口
  10. 微信小程序使用vant实现日历弹框