Как использовать filesystemwatcher и отправлять почту каждый раз, когда файл создается в папке?
Существует процесс, который мы запускаем, который создает файлы и записывает данные о конкретном событии. Файл создается в папке: C:\\EventListenerFolder\\ . Теперь всякий раз, когда создается новый файл и в него записываются данные, нам нужно отправить письмо.
public static void RunEventListenerPrgm()
{
// почтовое уведомление должно отправляться по мере того, как файл генерируется в C:\\EventListenerFolder\\
в то время как (правда)
{
Системы.ИО.Класса filesystemwatcher m_Watcher = новая система.ИО.Класса filesystemwatcher();
m_Watcher.Filter="*. txt";
m_Watcher.Путь = "C:\\EventListenerFolder\\";
m_Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.Каталог название;
m_Watcher.Изменено += новый FileSystemEventHandler(OnChanged);
m_Watcher.EnableRaisingEvents = true;
}
}
общественная статический недействительным событий onchanged(объект отправителя, FileSystemEventArgs е)
{
строки stringReceived;
строка[] сайт allfiles = система.ИО.Каталог.Заражен("C:\\EventListenerFolder\\");
foreach (строковый файл во всех файлах)
{
Приставка.WriteLine ("Найден Файл Соответствия EventListener. Имя файла: "+ file);
пробовать
{
stringReceived = система.ИО.Файл.ReadAllText(файл);
}
поймать (исключение бывший)
{
continue; / / чтобы избежать чтения файла, когда он находится в процессе записи . поэтому мы ждем, пока файл будет записан, а затем читаем его
}
SendMailFunction(stringReceived);
Файл.Удалить файлы);
}
}
В этом сценарии мы получаем более 100 писем для одного и того же файла. И мы хотим, чтобы только одна почта для одного файла была отправлена.
Что я уже пробовал:
Попробовал сменить m_Watcher.Изменено += новый FileSystemEventHandler(OnChanged);
к m_Watcher.Created+= new FileSystemEventHandler(OnChanged);
все равно не работает.
Может быть, фильтр событий file watcher, который я использую, неверен?
Не могли бы вы помочь мне в том же самом?