馬上放假了,好開森啊O(∩_∩)O哈哈~
———————————————————————————————————————————————————————
昨天逛園子,發現了一個FileSystemWatcher的東西,大概看了一下,完全可以在后台自動監控文件的變化,深深后悔以前沒有發現啊,簡直為我省去了一大段代碼啊……
節前工作不是很多,就嘗試着用了一下,不過發現還有些問題,就是事件會重復觸發,以后再解決吧。就不多羅嗦了……
貼代碼才是王道啊
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace filewatcher
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string pt;//file path
FileSystemWatcher watcher = new FileSystemWatcher();
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
radioButton1.Checked = true;
ListView lst = new ListView();
}
private void textBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
FolderBrowserDialog path = new FolderBrowserDialog();
path.ShowDialog();
this.textBox1.Text = path.SelectedPath.ToString();
this.textBox1.Font = new Font(textBox1.Font, textBox1.Font.Style | FontStyle.Regular);
this.textBox1.TextAlign =HorizontalAlignment.Left;
this.textBox1.ForeColor = Color.Black;
pt = textBox1.Text;
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
if (radioButton1.Checked)
pt = "C:\\";
if (radioButton2.Checked)
pt = "D:\\";
if (radioButton3.Checked)
pt = "E:\\";
if (radioButton4.Checked)
pt = "F:\\";
filewatcher();
groupBox1.Enabled = false;
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
watcher.EnableRaisingEvents = false;
groupBox1.Enabled = true;
}
private void filewatcher()
{
try
{
if (flag == 1)
{
watcher.Path = @pt;
watcher.IncludeSubdirectories = true;//全局文件監控,包括子目錄
watcher.EnableRaisingEvents = true;//啟用文件監控
watcher.Created += new FileSystemEventHandler(OnCreat);
watcher.Deleted += new FileSystemEventHandler(OnDelet);
watcher.Changed += new FileSystemEventHandler(OnChange);
}
else
{
watcher.EnableRaisingEvents = false;
return;
}
}
catch(Exception ex)
{
return;
}
}
private void OnCreat(object sender, FileSystemEventArgs e)
{
ListViewItem li = new ListViewItem(DateTime.Now.ToString("HH:mm:ss"));
li.SubItems.Add(getname(e.Name.ToString()));
li.SubItems.Add(e.ChangeType.ToString());
li.SubItems.Add(e.FullPath.ToString());
lst.Items.Add(li);
}
private void OnDelet(object sender, FileSystemEventArgs e)
{
ListViewItem li = new ListViewItem(DateTime.Now.ToString("HH:mm:ss"));
li.SubItems.Add(getname(e.Name.ToString()));
li.SubItems.Add(e.ChangeType.ToString());
li.SubItems.Add(e.FullPath.ToString());
lst.Items.Add(li);
}
private void OnChange(object sender, FileSystemEventArgs e)
{
ListViewItem li = new ListViewItem(DateTime.Now.ToString("HH:mm:ss"));
li.SubItems.Add(getname(e.Name.ToString()));
li.SubItems.Add(e.ChangeType.ToString());
li.SubItems.Add(e.FullPath.ToString());
lst.Items.Add(li);
}
//處理,獲得文件名
private string getname(string str)
{
try
{
string[] sttarr = str.Split(new char[] { Convert.ToChar("\\") });
int length = sttarr.Length;
string filename = sttarr[length-1];
return filename;
}
catch (Exception cc)
{
MessageBox.Show("文件路徑不合法","提示");
return str;
}
}
}
}
運行界面

:突然發現點小問題,就是事件會重復觸發。。。順道求解決方案啊
