利用FileWatcher实现文件实时监视

摘要:
FileWatcher可以使用系统实时监控目录中的文件(新的、重命名的、修改的、删除的);使用系统。IO;使用System.Windows。形式;命名空间Fw{public分部类frm1:表单{private FileSystemWatcher观察者

FileWatcher能实现对某一目录的文件(新建,改名,内容修改,删除)的实时监视

using System;
using System.IO;
using System.Windows.Forms;

namespace Fw
{
    
public partial class frm1 : Form
    {
        
private FileSystemWatcher watcher;
        
private delegate void UpdateWatchTextDelegate(string newText);


        
public frm1()
        {
            InitializeComponent();
            
this.watcher = new FileSystemWatcher();
            
this.watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
            
this.watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
            
this.watcher.Changed += new FileSystemEventHandler(watcher_Changed);
            
this.watcher.Created += new FileSystemEventHandler(watcher_Created);

        }

        
public void UpdateWatchText(string newText)
        {
            lblWatch.Text 
= newText;
        }


        
public void WriteLog(string LogContent) 
        {
            
using (StreamWriter sw = new StreamWriter("c:\\Log.txt"true))
            {
                sw.WriteLine(LogContent);
                sw.Close();
            } 
            
        }

        
void watcher_Created(object sender, FileSystemEventArgs e)
        {           
            
try
            {
                WriteLog(String.Format(
"File: {0} Created", e.FullPath));
                
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "文件" + e.FullPath + "被创建");
            }
            
catch (IOException)
            {
                
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "创建日志写入失败!");
            }
        }


        
void watcher_Changed(object sender, FileSystemEventArgs e)
        {            
            
try
            {              
                WriteLog(String.Format(
"File: {0} {1}", e.FullPath, e.ChangeType.ToString()));
                
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "文件" + e.FullPath + "被修改");
            }
            
catch (IOException)
            {
                
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "修改日志写入失败!");
            }
        }

        
void watcher_Renamed(object sender, RenamedEventArgs e)
        {            
            
try
            {               
                WriteLog(String.Format(
"File renamed from {0} to {1}", e.OldName, e.FullPath));
                
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "文件" + e.OldName + "被重命名为" + e.FullPath);
            }
            
catch (IOException)
            {
                
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "重命名日志写入失败!");
            }
        }

        
void watcher_Deleted(object sender, FileSystemEventArgs e)
        {            
            
try
            {                
                WriteLog(String.Format(
"File: {0} Deleted", e.FullPath));
                
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "文件" + e.FullPath + "被删除");
            }
            
catch (IOException)
            {
                
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "删除日志写入失败!");
            }
        }


        
private void cmdBrowse_Click(object sender, EventArgs e)
        {
            
if (this.folderBrowserDialog1.ShowDialog() != DialogResult.Cancel)
            {
                txtLocation.Text 
= this.folderBrowserDialog1.SelectedPath;
                cmdWatch.Enabled 
= true;
            }
        }

        
private void cmdWatch_Click(object sender, EventArgs e)
        {
            
if (txtLocation.Text.Length <= 0
            {
                MessageBox.Show(
"请先选择要监视的文件夹!");
                cmdBrowse.Focus();
                
return;
            }
            watcher.Path 
= txtLocation.Text;//监控路径(文件夹)
            watcher.Filter = "*.*";//如果filter为文件名称则表示监控该文件,如果为*.txt则表示要监控指定目录当中的所有.txt文件
            watcher.NotifyFilter = NotifyFilters.LastWrite |
                NotifyFilters.FileName 
|
                NotifyFilters.Size;
            lblWatch.Text 
= watcher.Path + " 监视中利用FileWatcher实现文件实时监视第1张";

            
//begin watching.
            watcher.EnableRaisingEvents = true;
        }

        
private void btnStop_Click(object sender, EventArgs e)
        {
            watcher.EnableRaisingEvents 
= false;
            lblWatch.Text 
= watcher.Path + " 监视已经停止!";
        }




    }
}
利用FileWatcher实现文件实时监视第2张
注:如果目录下还有子目录,FileWatcher默认情况下并不能监视到子目录下的文件,可以通过设置watcher.IncludeSubdirectories = true; 解决这个问题
源代码下载:https://files.cnblogs.com/yjmyzz/FileWatcher.rar

免责声明:文章转载自《利用FileWatcher实现文件实时监视》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇升级Kubernetes 1.18前,你不得不知的9件事Spring整合ActiveMQ实现消息延迟投递和定时投递下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

jmeter监控内存,CPU等方法

当然,我们也可以选择本地进程下的远程进程来获取服务器的内存使用情况和其他信息。在文本框中输入需要测试的服务器的IP地址:port,然后在下面输入用户名和密码。单击“连接”以查看发生的情况。...

目录扫描工具DirBuster

DirBuster用于检测web服务器上的目录和隐藏文件。因此,必须在运行之前安装Java环境。在TargetURL下输入要检测的网站的地址。请注意,地址应与协议一起添加。一种是自动选择。它将决定是使用head方法还是get方法。number of Thread是所选扫描线程的数量,selectscanning type是所选的扫描类型。Listbasedb...

Element plus的tree组件实现单选和搜索功能

--elementplus树组件实现单选及搜索功能--˃Elementplus树组件实现单选及搜索功能获取选中的节点//给节点添加classconstcustomNodeClass==˃{if{return'no-checkbox-node';}returnnull;};exportdefault{name:'tree-radio',data(){retur...

2.页面绘制和引入组件库uView

文本+背景色的形式,而不是横幅图的形式,可以节省未来的工作量。在index.vue中,关于开关的代码:EFGHIJKLMNOPQRSTUWXYZB˃DEFGHIJKLNNOPQRSTUVWXYZEFGHIJKLMNOPQRSTUVWXYZ导出默认值{data(){return{}},onLoad()},方法:{}}。横幅{width:100%;height:...

SkyWalking 服务端配置

在安装基于Docker的ElasticSearch时,在为什么需要链接跟踪一章中,我们介绍了几种SkyWalking存储解决方案。官方推荐的解决方案是ElasticSearch,因此我们需要首先安装Elastic搜索。...

yml在线格式转换工具(properties)

目前springboot的配置文件已经同时支持properties和yaml格式。...