NotifyFilter が機能しない Windows サービスがあります (同様の WinForms アプリケーションを作成してコードを検証しました)。そのコード行を削除するとすぐに、サービスが正常に動作し、WinForms アプリケーションでイベント ハンドラーが起動するのを確認できます。
私が行っているのは、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();
}
}