То, что я пытаюсь сделать, это посмотреть каталог для новых добавленных папок.Как правильно использовать FileSystemWatcher в C# - Несколько файлов и получение «Lazy» на мне
После добавления папки я копирую стандартную структуру каталогов из другой папки в эту, а затем использую Open Office XML для поиска и замены содержимого одного из документов Microsoft Word, который включен в исходные папки.
Все работает прекрасно ... КРОМЕ: не
1) Если я копирую более одной папки к «наблюдаемому» каталог, один из них получит обрабатывались, ни один из других будет обрабатываться. Кроме того, после этого приложение «застревает» и его нужно перезапустить, чтобы снова работать.
2) По какой-то причине он иногда получает «ленивый» на меня и просто прекращает работу. Наблюдая за консольным окном, он показывает, что он находится в части кода , но ничего не происходит. Кажется, это происходит непоследовательно.
Вот часть FileSystemWatcher кода (не хочу утомлять вас с OOXML и папки копирования битов):
class soClass
{
private const string strDirectory = @"C:\[DIRECTORY-TO-WATCH\]";
private static FileSystemWatcher fw = new FileSystemWatcher(strDirectory);
private static void WatchIt()
{
// WHILE TRUE -- JUST MAKES IT RUN OVER AND OVER AGAIN...
while (true)
{
Console.WriteLine("Waiting on file/folder changes...");
// HANGS HERE ON THE 'REG
string strName = fw.WaitForChanged(WatcherChangeTypes.Created, -1).Name;
Console.WriteLine("File/Folder Added!");
Console.WriteLine("Starting over...");
Console.WriteLine("--------------------------------------------------------");
}
}
}
Как всегда, любая помощь очень ценится.
UPDATE:
Вот окончательный код, который работал, благодаря @openshac
class soClass
{
private const string strDirectory = @"C:\[DIRECTORY-TO-WATCH]";
private static void Main()
{
WatchIt();
}
public static void WatchIt()
{
FileSystemWatcher fw = new FileSystemWatcher();
fw.Path = strDirectory;
fw.Created += new FileSystemEventHandler(OnCreated);
Console.WriteLine("Waiting on file/folder changes...");
// BEGIN WATCHING
fw.EnableRaisingEvents = true;
// WAIT FOR USER TO QUIT THE PROGRAM
Console.WriteLine("Press \'q\' to quit the sample.");
while (Console.Read() != 'q') ;
}
private static void OnCreated(object sender, FileSystemEventArgs fileSystemEventArgs)
{
Console.WriteLine("File/Folder Added!");
string strName = fileSystemEventArgs.Name;
// DO STUFF HERE!!
Console.WriteLine("Starting over...");
//rwlock.ExitWriteLock();
Console.WriteLine("--------------------------------------------------------");
}
}
Также найдено помощь здесь: https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx
Это был ключ. активируя событие, а не зацикливание. этот код действительно не «дождался» события, я должен был добавить некоторые пользовательские взаимодействия для выхода. – gotmike