using System.IO;
//file system watcher object.
private FileSystemWatcher watcher;
private delegate void UpdateWatchTextDelegate(string newText);
public void UpdateWatchText(string newText)
{
lblWatch.Text = newText;
}
public Form1()
{
InitializeComponent();
this.watcher = new FileSystemWatcher();
this.watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
this.watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
this.watcher.Changed += new FileSystemEventHandler(watcher_Changed);
this.watcher.Created += new FileSystemEventHandler(watcher_Created);
}
void watcher_Created(object sender, FileSystemEventArgs e)
{
//throw new NotImplementedException();
try
{
StreamWriter sw = new StreamWriter("c:\\Log.txt", true);
sw.WriteLine("File: {0} Created", e.FullPath);
sw.Close();
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "Wrote create event to log");
}
catch (IOException)
{
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "Error Writing to log");
}
}
void watcher_Changed(object sender, FileSystemEventArgs e)
{
//throw new NotImplementedException();
try
{
StreamWriter sw = new StreamWriter("c:\\Log.txt", true);
sw.WriteLine("File: {0} {1}", e.FullPath, e.ChangeType.ToString());
sw.Close();
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "Wrote change event to log");
}
catch (IOException)
{
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "Error Writing to log");
}
}
void watcher_Renamed(object sender, RenamedEventArgs e)
{
//throw new NotImplementedException();
try
{
StreamWriter sw = new StreamWriter("c:\\Log.txt", true);
sw.WriteLine("File renamed from {0} to {1}", e.OldName, e.FullPath);
sw.Close();
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "Wrote renamed event to log");
}
catch(IOException)
{
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "Error Writing to log");
}
}
void watcher_Deleted(object sender, FileSystemEventArgs e)
{
//throw new NotImplementedException();
try
{
StreamWriter sw = new StreamWriter("c:\\Log.txt", true);
sw.WriteLine("File: {0} Deleted", e.FullPath);
sw.Close();
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "Wrote delete event to log");
}
catch (IOException)
{
this.BeginInvoke(new UpdateWatchTextDelegate(UpdateWatchText), "Error Writing to log");
}
}
private void cmdBrowse_Click(object sender, EventArgs e)
{
if (FileDialog.ShowDialog() != DialogResult.Cancel)
{
txtLocation.Text = FileDialog.FileName;
cmdWatch.Enabled = true;
}
}
private void cmdWatch_Click(object sender, EventArgs e)
{
watcher.Path = Path.GetDirectoryName(txtLocation.Text);//監控路徑(檔案夾)
watcher.Filter = "*.*" ;//如果filter為檔案名稱則表示監控該檔案,如果為*.txt則表示要監控指定目錄當中的所有.txt檔案
watcher.NotifyFilter = NotifyFilters.LastWrite |
NotifyFilters.FileName |
NotifyFilters.Size;
lblWatch.Text = "Watching " + txtLocation.Text;
//begin watching.
watcher.EnableRaisingEvents = true;
}