FileSystemWatcher активируется только один раз
Я новичок в C#, и я застрял в этой проблеме.
Я создаю службу, которая следит за входящими файлами, и когда файл придет, я вызову файл.bat, чтобы выполнить некоторую обработку.
Проблема с кодом ниже заключается в том, что я копирую файл в наблюдаемую папку в первый раз, когда он работает, во второй раз, когда я копирую файл в наблюдаемую папку, он больше не реагирует. Он работает как служба Windows и работает все время.
Раньше работал, я не уверен, что мне не хватает.
Надеюсь, кто-нибудь может мне помочь с этим. Спасибо.
namespace TestCSWinWatcherService
{
using System;
using System.IO;
using System.Configuration;
partial class SAPFileService
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.FSWatcherTest = new System.IO.FileSystemWatcher();
((System.ComponentModel.ISupportInitialize)(this.FSWatcherTest)).BeginInit();
//
// FSWatcherTest
//
this.FSWatcherTest.InternalBufferSize = 32768;
this.FSWatcherTest.EnableRaisingEvents = true;
this.FSWatcherTest.NotifyFilter = ((System.IO.NotifyFilters)((((((((System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.DirectoryName)
| System.IO.NotifyFilters.Attributes)
| System.IO.NotifyFilters.Size)
| System.IO.NotifyFilters.LastWrite)
| System.IO.NotifyFilters.LastAccess)
| System.IO.NotifyFilters.CreationTime)
| System.IO.NotifyFilters.Security)));
this.FSWatcherTest.Changed += new System.IO.FileSystemEventHandler(this.FSWatcherTest_Changed);
this.FSWatcherTest.Created += new System.IO.FileSystemEventHandler(this.FSWatcherTest_Created);
this.FSWatcherTest.Deleted += new System.IO.FileSystemEventHandler(this.FSWatcherTest_Deleted);
this.FSWatcherTest.Renamed += new System.IO.RenamedEventHandler(this.FSWatcherTest_Renamed);
//
// SAPFileService
//
this.ServiceName = "Service1";
((System.ComponentModel.ISupportInitialize)(this.FSWatcherTest)).EndInit();
}
#endregion
private System.IO.FileSystemWatcher FSWatcherTest;
/* DEFINE WATCHER EVENTS... */
/// <summary>
/// Event occurs when the contents of a File or Directory are changed
/// </summary>
private void FSWatcherTest_Changed(object sender,
System.IO.FileSystemEventArgs e)
{
//code here for newly changed file or directory
String SAPInboundPath = ConfigurationManager.AppSettings["WatchPath"];
String SAPArchivePath = ConfigurationManager.AppSettings["SAPArchivePath"];
String SAPLogPath = ConfigurationManager.AppSettings["SAPLogPath"];
String SAPDBCDFileName = ConfigurationManager.AppSettings["SAPDBCDFileName"];
Boolean SAPDBCDExists = false;
string[] files = System.IO.Directory.GetFiles(SAPInboundPath, SAPDBCDFileName, System.IO.SearchOption.TopDirectoryOnly);
if (files.Length > 0)
{
//file exist
SAPDBCDExists = true;
}
if (SAPDBCDExists)
{
String BatPath = ConfigurationManager.AppSettings["SAPBatPath"];
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(BatPath);
psi.RedirectStandardOutput = true;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
System.Diagnostics.Process listFiles;
listFiles = System.Diagnostics.Process.Start(psi);
System.IO.StreamReader myOutput = listFiles.StandardOutput;
listFiles.WaitForExit();
//System.IO.File.Move(e.FullPath, SAPArchivePath + e.Name + DateTime.Now.ToString("dMMyyyyHHmmss"));
}
}
Я пробовал:
1) Ваш сон взломать
2) Увеличение буфера
3) Проверка ГК не очищает
Ничего не работает...:(