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; //允许跨线程调用
}