Это больше вопрос о том, как лучше всего реализовать это.
У меня есть 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
все события определенного процесса?