监控文件

主代码
1 using System;
2  using System.Text;
3  using System.IO;
4 using System.Windows.Forms;
5 using System.Threading;
6 using System.Drawing;
7
8 namespace FileSystemWatch
9 {
10 public partial class Form1 : Form
11 {
12 ListViewItem lv = null;
13 ListViewColumnSorter lvColumnSorter = null;
14 public Form1()
15 {
16 InitializeComponent();
17 Watcher();
18 }
19
20 private void Watcher()
21 {
22 fsWatcher.Path = "E:\\dnt31";
23 //更改类型
24 fsWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.CreationTime | NotifyFilters.Security | NotifyFilters.Size;
25 //是否监视子路径
26 fsWatcher.IncludeSubdirectories = true;
27 //是否显示风格
28 lvFile.GridLines = false;
29 lvFile.Columns.Add("操作",80);
30 lvFile.Columns.Add("文件名",150);
31 lvFile.Columns.Add("文件路径",200);
32 lvFile.Columns.Add("修改时间",150);
33 lvFile.Columns.Add("原文件名",150);
34 lvFile.Columns.Add("原文件路径",200);
35
36 lvColumnSorter = new ListViewColumnSorter();
37 lvFile.ListViewItemSorter = lvColumnSorter;
38 }
39
40 private void fsWatcher_Event(object sender, FileSystemEventArgs e)
41 {
42 //防止一个事件触发多次,待完善
43 fsWatcher.EnableRaisingEvents = false;
44 Thread th = new Thread(new ThreadStart(
45 delegate() {
46 Thread.Sleep(1000);
47 fsWatcher.EnableRaisingEvents = true;
48 }
49 ));
50 th.Start();
51 lv = new ListViewItem(new string[] { e.ChangeType.ToString(), e.Name, e.FullPath, DateTime.Now.ToString(),"","" });
52 lvFile.Items.Add(lv);
53 }
54
55 private void fsWatcher_Renamed(object sender, RenamedEventArgs e)
56 {
57 fsWatcher.EnableRaisingEvents = false;
58 Thread th = new Thread(new ThreadStart(
59 delegate()
60 {
61 Thread.Sleep(1000);
62 fsWatcher.EnableRaisingEvents = true;
63 }
64 ));
65 th.Start();
66 lv = new ListViewItem(new string[] { e.ChangeType.ToString(), e.Name, e.FullPath, DateTime.Now.ToString(),e.OldName,e.OldFullPath });
67 lvFile.Items.Add(lv);
68 }
69
70 private void lvFile_ColumnClick(object sender, ColumnClickEventArgs e)
71 {
72 // 检查点击的列是不是现在的排序列.
73 if (e.Column == lvColumnSorter.SortColumn)
74 {
75 // 重新设置此列的排序方法.
76 if (lvColumnSorter.Order == SortOrder.Ascending)
77 {
78 lvColumnSorter.Order = SortOrder.Descending;
79 }
80 else
81 {
82 lvColumnSorter.Order = SortOrder.Ascending;
83 }
84 }
85 else
86 {
87 // 设置排序列,默认为正向排序
88 lvColumnSorter.SortColumn = e.Column;
89 lvColumnSorter.Order = SortOrder.Ascending;
90 }
91
92 // 用新的排序方法对ListView排序
93 this.lvFile.Sort();
94 lvColumnSorter.Order = SortOrder.None;
95 }
96 }
97 }
98

以下是排序代码:

 

排序类
1 using System.Collections;
2 using System.Windows.Forms;
3
4 /// <summary>
5 /// 继承自IComparer
6 /// </summary>
7 public class ListViewColumnSorter : IComparer
8 {
9 /// <summary>
10 /// 指定按照哪个列排序
11 /// </summary>
12 private int ColumnToSort;
13 /// <summary>
14 /// 指定排序的方式
15 /// </summary>
16 private SortOrder OrderOfSort;
17 /// <summary>
18 /// 声明CaseInsensitiveComparer类对象
19 /// </summary>
20 private CaseInsensitiveComparer ObjectCompare;
21
22 /// <summary>
23 /// 构造函数
24 /// </summary>
25 public ListViewColumnSorter()
26 {
27 // 默认按第一列排序
28 ColumnToSort = 0;
29
30 // 排序方式为不排序
31 OrderOfSort = SortOrder.None;
32
33 // 初始化CaseInsensitiveComparer类对象
34 ObjectCompare = new CaseInsensitiveComparer();
35 }
36
37 /// <summary>
38 /// 重写IComparer接口.
39 /// </summary>
40 /// <param name="x">要比较的第一个对象</param>
41 /// <param name="y">要比较的第二个对象</param>
42 /// <returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>
43 public int Compare(object x, object y)
44 {
45 int compareResult;
46 ListViewItem listviewX, listviewY;
47
48 // 将比较对象转换为ListViewItem对象
49 listviewX = (ListViewItem)x;
50 listviewY = (ListViewItem)y;
51
52 // 比较
53 compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
54
55 // 根据上面的比较结果返回正确的比较结果
56 if (OrderOfSort == SortOrder.Ascending)
57 {
58 // 因为是正序排序,所以直接返回结果
59 return compareResult;
60 }
61 else if (OrderOfSort == SortOrder.Descending)
62 {
63 // 如果是反序排序,所以要取负值再返回
64 return (-compareResult);
65 }
66 else
67 {
68 // 如果相等返回0
69 return 0;
70 }
71 }
72
73 /// <summary>
74 /// 获取或设置按照哪一列排序.
75 /// </summary>
76 public int SortColumn
77 {
78 set
79 {
80 ColumnToSort = value;
81 }
82 get
83 {
84 return ColumnToSort;
85 }
86 }
87
88 /// <summary>
89 /// 获取或设置排序方式.
90 /// </summary>
91 public SortOrder Order
92 {
93 set
94 {
95 OrderOfSort = value;
96 }
97 get
98 {
99 return OrderOfSort;
100 }
101 }
102
103 }
104

 

posted @ 2010-07-01 14:02  davidDJT  阅读(238)  评论(0)    收藏  举报