我有一個Windows服務(並通過創建一個類似的WinForms應用程序驗證代碼)NotifyFilter不起作用。只要我刪除了這行代碼,服務就可以正常工作,並且我可以在WinForms應用程序中看到事件處理程序觸發。FileSystemWatcher的NotifyFilter不起作用
我所做的只是將文本文件放入FileSystemWatcher的輸入目錄中,以啓動watcher_FileChanged
委託。當我有_watcher.NotifyFilter = NotifyFilters.CreationTime;
在那裏,它不起作用。當我把它拉出來,它工作正常。
任何人都可以告訴我,如果我做錯了這個過濾器?
以下是OnStart事件的FSW代碼。
protected override void OnStart(string[] args)
{
_watcher = new FileSystemWatcher(@"C:\Projects\Data\Test1");
_watcher.Created += new FileSystemEventHandler(watcher_FileChanged);
_watcher.NotifyFilter = NotifyFilters.CreationTime;
_watcher.IncludeSubdirectories = false;
_watcher.EnableRaisingEvents = true;
_watcher.Error += new ErrorEventHandler(OnError);
}
private void watcher_FileChanged(object sender, FileSystemEventArgs e)
{
// Folder with new files - one or more files
string folder = @"C:\Projects\Data\Test1";
System.Console.WriteLine(@"C:\Projects\Data\Test1");
//Console.ReadKey(true);
// Folder to delete old files - one or more files
string output = @"C:\Temp\Test1\";
System.Console.WriteLine(@"C:\Temp\Test1\");
//Console.ReadKey(true);
// Create name to call new zip file by date
string outputFilename = Path.Combine(output, string.Format("Archive{0}.zip", DateTime.Now.ToString("MMddyyyy")));
System.Console.WriteLine(outputFilename);
//Console.ReadKey(true);
// Save new files into a zip file
using (ZipFile zip = new ZipFile())
{
// Add all files in directory
foreach (var file in Directory.GetFiles(folder))
{
zip.AddFile(file);
}
// Save to output filename
zip.Save(outputFilename);
}
DirectoryInfo source = new DirectoryInfo(output);
// Get info of each file into the output directory to see whether or not to delete
foreach (FileInfo fi in source.GetFiles())
{
if (fi.CreationTime < DateTime.Now.AddDays(-1))
fi.Delete();
}
}
除了'NotifyFilters.LastWrite'之外,您似乎還需要關注'NotifyFilters.Attributes'來捕獲文件內容更改。對於任何其他基於屬性的通知('CreationTime','Size'等),情況可能如此。 –