devilhand 发表于 2013-2-7 03:46:11

监控文件夹的变化

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Collections;namespace FileWatch{    public partial class FrmFileWatch : Form    {      /// <summary>      /// 监控文件夹的对象      /// </summary>      private readonly FileSystemWatcher fileWatcher;      public FrmFileWatch()      {            InitializeComponent();            fileWatcher = new FileSystemWatcher();            //当 Changed、Created、Deleted 和 Renamed 事件由可见 Windows 窗体组件(如 Button)处理时,通过系统线程池访问组件可能不起作用或者导致异常。若要避免这种情况,请将 SynchronizingObject 设置为 Windows 窗体组件,这样将引起在创建组件的同一线程上调用处理 Changed、Created、Deleted 和 Renamed 事件的方法。            fileWatcher.SynchronizingObject = this;            //注册事件            fileWatcher.Created += fileWatcher_Created;            fileWatcher.Deleted += fileWatcher_Deleted;            fileWatcher.Changed += fileWatcher_Changed;            fileWatcher.Renamed += fileWatcher_Renamed;      }      #region 监控文件夹回调函数      /// <summary>      /// 创建回调函数      /// </summary>      /// <param name="sender"></param>      /// <param name="e"></param>      private void fileWatcher_Created(object sender, FileSystemEventArgs e)      {            lbChangedFile.Items.Add("创建" + e.FullPath);            lbChangedFile.SelectedIndex = lbChangedFile.Items.Count -1;      }      /// <summary>      /// 删除回调函数      /// </summary>      /// <param name="sender"></param>      /// <param name="e"></param>      private void fileWatcher_Deleted(object sender, FileSystemEventArgs e)      {            lbChangedFile.Items.Add("删除"+ e.FullPath);            lbChangedFile.SelectedIndex = lbChangedFile.Items.Count - 1;      }      /// <summary>      /// 修改回调函数      /// </summary>      /// <param name="sender"></param>      /// <param name="e"></param>      private void fileWatcher_Changed(object sender, FileSystemEventArgs e)      {            lbChangedFile.Items.Add("修改"+ e.FullPath);            lbChangedFile.SelectedIndex = lbChangedFile.Items.Count - 1;      }      /// <summary>      /// 重命名回调函数      /// </summary>      /// <param name="sender"></param>      /// <param name="e"></param>      private void fileWatcher_Renamed(object sender, RenamedEventArgs e)      {            lbChangedFile.Items.Add(e.OldFullPath+"重命名为"+ e.FullPath);            lbChangedFile.SelectedIndex = lbChangedFile.Items.Count - 1;      }      #endregion      #region 浏览      private void btnBrowse_Click(object sender, EventArgs e)      {            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();            if (DialogResult.OK != folderBrowserDialog.ShowDialog()) return;            string path = folderBrowserDialog.SelectedPath;            if (!string.IsNullOrEmpty(path.Trim()))            {                txtPath.Text = path;            }      }      #endregion      #region 监控      private void btnFileWatch_Click(object sender, EventArgs e)      {            if (!Directory.Exists(txtPath.Text.Trim()))            {                MessageBox.Show(@"该文件夹不存在!", @"信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);                return;            }            //开始监控指定的文件夹            fileWatcher.Path = txtPath.Text.Trim();            fileWatcher.EnableRaisingEvents = true;            MessageBox.Show(string.Format(@"文件夹【{0}】已处于监控状态!", txtPath.Text.Trim()), @"信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);      }      #endregion      #region 窗体关闭时释放资源      private void FrmFileWatch_FormClosed(object sender, FormClosedEventArgs e)      {            fileWatcher.EnableRaisingEvents = false;            fileWatcher.Dispose();      }      #endregion    }} 
页: [1]
查看完整版本: 监控文件夹的变化