Filesystemwatcher как задача расписания
Всем Привет,
Я разработал консольное приложение filesystemWatcher, когда я запускаю его, он ловит изменения файла, но когда мне нужно развернуть его как запланированную задачу, я не могу заставить его ловить изменения файла, потому что watcher работает в течение секунды, возможно, если файл уже там, он не будет ловить изменения.
Кто-нибудь может помочь мне в достижении этой задачи, я хочу, чтобы этот класс FileSystemWatcher забирал созданные или измененные файлы и помещал их путь и детали в таблицу.
Вот мой код:
public class Watcher { public static void Main(string[] args) { Run(args); } [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] public static void Run(string[] args) { // If a directory is not specified, exit program. if (args.Length < 1) { // Display the proper way to call the program. Console.WriteLine("Usage: Watcher.exe (directory)"); return; } // Create a new FileSystemWatcher and set its properties. FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = args[0]; /* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */ watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Size;// | NotifyFilters.DirectoryName; // Only watch text files. watcher.Filter = "*.*"; // Add event handlers. watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnCreated); watcher.Renamed += new RenamedEventHandler(OnRenamed); // Begin watching. watcher.EnableRaisingEvents = true; watcher.IncludeSubdirectories = true; // Wait for the user to quit the program. Console.WriteLine("Press \'q\' to quit the sample."); while (Console.Read() != 'q') ; } //Fires if file changed. private static void OnChanged(object source, FileSystemEventArgs e) { if (ExecutePackage(e.FullPath)) File.Delete(e.FullPath); } //Fires if file Created. private static void OnCreated(object source, FileSystemEventArgs e) { if (ExecutePackage(e.FullPath)) File.Delete(e.FullPath); } //Fires if file Renamed. private static void OnRenamed(object source, RenamedEventArgs e) { if (ExecutePackage(e.FullPath)) File.Delete(e.FullPath); } /// /// This is the root directory where the flat files are going to be loaded /// private static bool ExecutePackage(string fileFullPath) { string errorDescription = string.Empty; DTSPackage _package = new DTSPackage(); try { if (!File.Exists(fileFullPath)) return false; string strFileExt = (Path.GetExtension(fileFullPath) ?? string.Empty).ToLower(); string directoryFullPath = Path.GetDirectoryName(fileFullPath) + @"\"; string sourceFileName = Path.GetFileNameWithoutExtension(fileFullPath); if (Regex.IsMatch(strFileExt, @"\.txt|\.csv", RegexOptions.IgnoreCase)) { int result = WatcherDB.CallGetImportMetaData(fileFullPath); if (result >= 1) return true; } } catch (Exception ex) { MessageBox.Show(ex.Message + ex.StackTrace, "Exception Details"); } finally { _package.ClearPackage(); } MessageBox.Show(errorDescription); return false; } }
Что я уже пробовал:
Я ищу в google и спрашиваю у друзей и т. д.