c#使用FileSystemWatcher的一些坑

2020-07-11  本文已影响0人  Magna

1.1依赖引用:

using system.IO

1.2基础代码(example):

//这个模块可以在onLoad里实现
FileSystemWatcher WatcherDemo = new FileSystemWatcher();
WatcherDemo.Path = ""  
xmlWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess;
//以上为监控的要素,还有其他,可以自己根据提示看一下

xmlWatcher.Created += new FileSystemEventHandler(this.fileChangedAction);
//fileChangedAction是一个监控到文件发生改变后自定义的事件,在本文1.3中实现
xmlWatcher.Changed += new FileSystemEventHandler(this.fileChangedAction);


xmlWatcher.EnableRaisingEvents = true; 

//一个线程只能监控一个文件夹
//但可以监控文件夹和子文件夹,所以这是一个实现多文件夹监控的思路
//要么重开新线程

1.3拦截到符合条件的动作后的函数

string lastModify = "";  //设置了一个全局开关,因为文件监控事件会出现两次事件

public void fileChangedAction(object source,FileSystemEventArgs e) {
            string nowModify = DateTime.Now.ToLongTimeString();
            
            if (nowModify != lastModify)
            {
                richTextBox1.AppendText("发生变化了" + DateTime.Now.ToLongTimeString() + "\n");
                //以上部分要生效,设计跨线程调用,在本文的1.4设置
                ReadXmlAndSaveToMongo useObject = new ReadXmlAndSaveToMongo();
                //这是一个自定义的类,实现需要的操作
                try
                {
                    useObject.ReadXml();
                }
                catch { 

                }
                
                lastModify = nowModify;
            }
            else {
                lastModify = nowModify;
            }

        }

1.4 跨线程调用开关

public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;    //允许跨线程调用
        }
上一篇下一篇

猜你喜欢

热点阅读