C # - Прогнозирование событий файловой системы при удалении папки

Это больше вопрос о том, как лучше всего реализовать это.

У меня есть FileSystemWatcher , который должен информировать меня об изменениях пользователя в файлах и папках. Также наблюдаются поддиры. В том же каталоге моя программа тоже иногда меняется. Я не хочу, чтобы FileSystemWatcher обнаруживал события при этих изменениях программы.

Моей первой реализацией был список, в который я мог добавлять ожидаемые события. Когда я получаю событие файловой системы, я проверяю список и игнорирую его, если оно есть. Звучит не очень надежно, но, похоже, работает.

Теперь я обнаружил настоящую проблему:
D: отслеживается FileSystemWatcher .
У меня две такие папки: D: \ folder1 \ folder2
Теперь я хочу удалить папку 1 (с папкой 2 в ней) своим приложением. Поэтому я поместил D: \ folder1 в свой список удаления. Затем я вызываю что-то вроде Directory.Delete (@ "D: \ folder1", true) . Теперь я замечаю, что папку folder1 нельзя удалить (почему когда-либо) из-за исключения. Я удаляю запись об удалении из своего списка, но папка 2 уже удалена, и я получаю его FileSystemEvent. Итак, я получаю событие FileSystem для D: \ folder1 \ folder2. Моя программа думает, что теперь пользователь удалил эту папку, и делает неправильные вещи.

Теперь у меня были некоторые идеи:

1.) Рекурсивно удалить папку, удалив каждый файл и каждую папку отдельно. Таким образом, я получаю для каждой подпапки и сохраняю отдельную запись в списке. Я уже реализовал его, но он очень-очень-очень медленный.

2. ) Может быть, есть лучший способ иметь умные фильтры в FileSystemWatcher , чтобы сделать мой список устаревшим?

3.) Возможно, можно удалить только дерево каталогов, если есть возможность удалить все. Так что, если это не удается, у меня все еще есть, а если не все, удаляется. Это кажется мне наиболее элегантным решением, но я не знаю, возможно ли это вообще?

4.) Можно ли заблокировать все файлы и папки исключительно моим программным обеспечением? Если все прошло нормально, должно быть возможно удалить все с помощью одной команды удаления или как-то так?

Я также открыт для других дополнительных решений.

Отредактируйте 1, чтобы было понятнее:

Я только хочу чтобы «увидеть» действия пользователя над папкой. Если я здесь манипулирую вещами из своей программы, я не хочу видеть эти события.

В моей реализации я получаю события для подпапок, если папка заблокирована и не может быть удалена.

Это не так просто объяснить по-английски, потому что я не носитель английского языка;).

Редактировать 2 :

5.) Может быть, можно отфильтровать в FileSystemWatcher все события определенного процесса?

5
задан fpdragon 16 February 2011 в 12:00
поделиться