Posted on 2009-07-09 09:47
Hero 阅读(495)
评论(0) 编辑 收藏 引用 所属分类:
C#积累
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
9
using System.IO;
10
11
namespace FileWatch
12

{
13
public partial class Form1 : Form
14
{
15
//FileSystemWatcher object
16
private FileSystemWatcher filewatcher;
17
//声明委托
18
private delegate void UpdateWatchTextDelegate( string newText );
19
20
public Form1()
21
{
22
InitializeComponent();
23
24
this.filewatcher = new FileSystemWatcher();
25
26
//添加事件订阅
27
this.filewatcher.Deleted += new FileSystemEventHandler(filewatcher_Deleted);
28
this.filewatcher.Renamed += new RenamedEventHandler(filewatcher_Renamed);
29
this.filewatcher.Changed += new FileSystemEventHandler(filewatcher_Changed);
30
this.filewatcher.Created += new FileSystemEventHandler(filewatcher_Created);
31
32
//检测文件目录是否存在
33
DirectoryInfo dirInfo = new DirectoryInfo( @"C:\FileLogs" ) ;
34
if( !dirInfo.Exists )
{ dirInfo.Create() ; }
35
}
36
37
//异步更新labelWatch中的文本
38
public void UpdateWatchText( string newText )
39
{
40
labelWatch.Text = newText;
41
}
42
43
//定义事件处理器
44
public void filewatcher_Changed( object source, FileSystemEventArgs e )
45
{
46
try
47
{
48
StreamWriter streamwriter = new StreamWriter( @"C:\FileLogs\Log.txt", true ) ;
49
streamwriter.WriteLine( "File: {0} {1}", e.FullPath, e.ChangeType.ToString() ) ;
50
51
streamwriter.Close() ;
52
53
this.BeginInvoke( new UpdateWatchTextDelegate(UpdateWatchText), "Wrote change event to log" ) ;
54
}
55
catch (IOException ex)
56
{
57
this.BeginInvoke( new UpdateWatchTextDelegate(UpdateWatchText), "Error writing to log" ) ;
58
}
59
60
}
61
62
public void filewatcher_Renamed( object source, RenamedEventArgs e )
63
{
64
try
65
{
66
StreamWriter streamwrite = new StreamWriter( @"C:\FileLogs\Log.txt", true ) ;
67
68
streamwrite.WriteLine( "File renamed from {0} to {1}", e.OldName, e.FullPath ) ;
69
70
streamwrite.Close() ;
71
72
this.BeginInvoke( new UpdateWatchTextDelegate( UpdateWatchText ), "wrote renamed event to log" ) ;
73
74
}
75
catch (IOException ex)
76
{
77
this.BeginInvoke( new UpdateWatchTextDelegate(UpdateWatchText), "Error writing to log" ) ;
78
}
79
}
80
81
public void filewatcher_Deleted( object source, FileSystemEventArgs e )
82
{
83
try
84
{
85
//打开写文件
86
StreamWriter streamwriter = new StreamWriter( @"C:\FileLogs\Log.txt", true ) ;
87
streamwriter.WriteLine( "File : {0} deleted", e.FullPath ) ;
88
89
streamwriter.Close() ;
90
91
this.BeginInvoke( new UpdateWatchTextDelegate(UpdateWatchText), "wrote delete event to log" ) ;
92
93
}
94
catch (IOException ex)
95
{
96
this.BeginInvoke( new UpdateWatchTextDelegate(UpdateWatchText), "Error writing to log" ) ;
97
}
98
}
99
100
public void filewatcher_Created( object source, FileSystemEventArgs e )
101
{
102
try
103
{
104
StreamWriter streamwriter = new StreamWriter( @"C:\FileLogs\Log.txt", true ) ;
105
streamwriter.WriteLine( "File : {0} was created", e.FullPath ) ;
106
streamwriter.Close() ;
107
108
this.BeginInvoke( new UpdateWatchTextDelegate( UpdateWatchText), "wrote create to log" ) ;
109
}
110
catch (IOException ex)
111
{
112
this.BeginInvoke( new UpdateWatchTextDelegate(UpdateWatchText), "Erroe writing to log" ) ;
113
}
114
}
115
116
private void Form1_Load( object sender, EventArgs e )
117
{
118
119
}
120
121
private void buttonBrowse_Click(object sender, EventArgs e)
122
{
123
if( openFileDialog1.ShowDialog() != DialogResult.Cancel )
124
{
125
//显示打开的文件名字
126
this.textBoxLocation.Text = openFileDialog1.FileName ;
127
128
//可以启动watch按钮
129
buttonWatch.Enabled = true ;
130
}
131
}
132
133
private void buttonWatch_Click(object sender, EventArgs e)
134
{
135
//获取监视的路径
136
filewatcher.Path = Path.GetDirectoryName( textBoxLocation.Text ) ;
137
//filewatcher.Filter = Path.GetFileName( textBoxLocation.Text ) ;
138
filewatcher.Filter = "*.txt";
139
filewatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Size | NotifyFilters.CreationTime | NotifyFilters.LastAccess ;
140
141
labelWatch.Text = "watching " + textBoxLocation.Text ;
142
143
//begin watching
144
filewatcher.EnableRaisingEvents = true ;
145
}
146
}
147
}