Я пытаюсь реализовать Filewatcher, который будет отслеживать каталог FilesDir на предмет создания или изменения (если данные изменены) файлы. Он отлично работает, если я копирую и вставляю только один файл в FileDir, но если я копирую и вставляю несколько файлов, то событие File_Created вызывается только для одного из них. файлы.
public void SetUpFileWatcher()
{
var sourcePath = ConfigurationManager.AppSettings["DirectoryPath"];
var fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.IncludeSubdirectories = false;
fileSystemWatcher.Filter = ConfigurationManager.AppSettings["FileType"];
fileSystemWatcher.Path = sourcePath;
fileSystemWatcher.EnableRaisingEvents = true;
fileSystemWatcher.Created += FileMonitorWatcher_FileCreated;
fileSystemWatcher.Changed += FileMonitorWatcher_FileChanged;
Logger.Info("SetUpFileWatcher", "End of Setting Up File Watcher");
}
/// <summary>
/// Event called when a new file is created.
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">FileSystemEventArgs</param>
private void FileMonitorWatcher_FileCreated(object sender, FileSystemEventArgs e)
{
Logger.Info("FileMonitorWatcher_FileCreated", "File created method started....");
((FileSystemWatcher)(sender)).EnableRaisingEvents = false;
FileMonitorManager fileMonitorMgr = new FileMonitorManager();
fileMonitorMgr.FileCreated(e.FullPath);
((FileSystemWatcher)(sender)).EnableRaisingEvents = true;
Logger.Info("FileMonitorSystemWatcher_Created:End", "Create Function for File Watcher End at: " + DateTime.Now.ToString());
}
/// <summary>
/// Event called when a file is changed.
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">FileSystemEventArgs</param>
private void FileMonitorWatcher_FileChanged(object sender, FileSystemEventArgs e)
{
Logger.Info("FileMonitorWatcher_FileChanged", "Updated method started....");
((FileSystemWatcher)(sender)).EnableRaisingEvents = false;
FileMonitorManager fileMonitorMgr = new FileMonitorManager();
fileMonitorMgr.FileCreated(e.FullPath);
((FileSystemWatcher)(sender)).EnableRaisingEvents = true;
Logger.Info("FileMonitorSystemWatcher_Changed:End", "Update Function for File Watcher End at: " + DateTime.Now.ToString());
}
Справка:
Итак, мне нужно, чтобы мой FileWatcher наблюдал за каталогом и вызывал событие File_Created только при создании нового файла и событие File_Changed только при изменении некоторых данных внутри файла.
Примечание.
Всякий раз, когда файл изменяется или создается в отслеживаемом каталоге, для этого файла вызывается метод SomeTimeConsumingMethod() для заполнения данных в базе данных. Метод SomeTimeConsumingMethod() в моем случае занимает около 3-4 минут.
Error
. - person juharr   schedule 10.03.2015