using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FileWatcher
{
public partial class Form1 : Form
{
private delegate void renameDelegate(RenamedEventArgs e); //声明传递RenamedEventArgs对象和委托,用于文件Renamed时更新UI界面
private delegate void setLogDelegate(FileSystemEventArgs e); //声明传递文件Created、Changed、Deleted对象和委托,用于文件增加、删除、修改时更新UI界面
private FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
private ColumnHeader chTime = new ColumnHeader();
private ColumnHeader chEvent = new ColumnHeader();
private ColumnHeader chFile = new ColumnHeader();
private ColumnHeader chPath = new ColumnHeader();
public Form1()
{
InitializeComponent();
chTime.TextAlign = HorizontalAlignment.Center;
chTime.Width = 130;
chTime.Text = "时间";
this.listViewInfo.Columns.Add(chTime);
chEvent.TextAlign = HorizontalAlignment.Center;
chEvent.Width = 80;
chEvent.Text = "事件";
this.listViewInfo.Columns.Add(chEvent);
chFile.Width = 270;
chFile.Text = "文件";
this.listViewInfo.Columns.Add(chFile);
chPath.Width = this.listViewInfo.Width - chTime.Width - chEvent.Width - chFile.Width - 21;
chPath.Text = "位置";
this.listViewInfo.Columns.Add(chPath);
ColumnHeader chEnd = new ColumnHeader();
chEnd.Width = 17;
chEnd.Text = "";
this.listViewInfo.Columns.Add(chEnd);
this.listViewInfo.View = View.Details;
this.listViewInfo.GridLines = true;
fileSystemWatcher.Changed += new FileSystemEventHandler(FileSystemWatcher_EventHandler);
fileSystemWatcher.Created += new FileSystemEventHandler(FileSystemWatcher_EventHandler);
fileSystemWatcher.Deleted += new FileSystemEventHandler(FileSystemWatcher_EventHandler);
fileSystemWatcher.Renamed += new RenamedEventHandler(FileSystemWatcher_Renamed);
fileSystemWatcher.Error += new ErrorEventHandler(FileSystemWatcher_Error);
fileSystemWatcher.IncludeSubdirectories = true;
fileSystemWatcher.EnableRaisingEvents = true;
}
#region 文件增加、删除、修改时被调用的处理方法
private void FileSystemWatcher_EventHandler(object sender, FileSystemEventArgs e)
{
if (listViewInfo.InvokeRequired) //判断是否跨线程
{
listViewInfo.Invoke(new setLogDelegate(SetLog), new object[] { e });//使用委托将方法封送到UI主线程处理
}
}
private void SetLog(FileSystemEventArgs e)
{
string strLog = "";
switch (e.ChangeType.ToString())
{
case "Created":
strLog = "文件创建";
break;
case "Changed":
strLog = "文件修改";
break;
case "Deleted":
strLog = "文件删除";
break;
default:
strLog = e.ChangeType.ToString();
break;
}
ListViewItem lvi = new ListViewItem();
lvi.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
lvi.SubItems.Add(strLog);
lvi.SubItems.Add(e.Name);
lvi.SubItems.Add(e.FullPath.Replace(e.Name,""));
listViewInfo.Items.Add(lvi);
}
#endregion
#region 重命名方法
private void FileSystemWatcher_Renamed(object sender, RenamedEventArgs e)
{
if (listViewInfo.InvokeRequired)
{
listViewInfo.Invoke(new renameDelegate(SetRenamedLog), new object[]{e});
}
}
private void SetRenamedLog(RenamedEventArgs e)
{
//listViewInfo.Items.Add(string.Format("重命名:{0} 被换名为:{1}, {2}", e.OldName, e.Name, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
ListViewItem lvi = new ListViewItem();
lvi.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
lvi.SubItems.Add("文件重命名");
lvi.SubItems.Add(e.OldName + "被换名为:" + e.Name);
lvi.SubItems.Add(e.FullPath.Replace(e.Name, ""));
listViewInfo.Items.Add(lvi);
}
#endregion
#region 错误事件的方法
private void FileSystemWatcher_Error(object sender, ErrorEventArgs e)
{
if (listViewInfo.InvokeRequired) //判断是否跨线程
{
//使用委托处理
Invoke(new Action(new Action(() =>
{
listViewInfo.Items.Add(string.Format("文件出错:{0}, {1}", e.ToString(), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
})));
}
}
#endregion
}
}
|