Это больше вопрос о том, как лучше всего это реализовать.
У меня есть FileSystemWatcher
, который должен информировать меня об изменениях пользователя в файлах и папках. Также просматриваются subdirs. В той же директории моя программа тоже иногда меняется. Я не хочу, чтобы FileSystemWatcher
обнаруживал события в этих изменениях программы.
Моей первой реализацией был список, в который я могу добавить ожидаемые события. Когда я получаю событие файловой системы, я проверяю список и игнорирую его, если оно есть. Это звучит не очень надежно, но, похоже, работает.
Теперь я обнаружил реальную проблему:
D: смотрит FileSystemWatcher
.
У меня есть две такие папки: D: \ folder1 \ folder2
Теперь я хочу удалить folder1 (с папкой в нем) с моим приложением. Поэтому я поместил D: \ folder1 в мой список удаления. Тогда я называю что-то вроде Directory.Delete(@"D:\folder1", true)
. Теперь я заметил, что folder1 не может быть удален (почему-либо) из-за исключения. Я удаляю запись об удалении из своего списка, но folder2 уже был удален, и я получаю его FileSystemEvent. Итак, я получаю событие FileSystem для D: \ folder1 \ folder2. Моя программа считает, что пользователь удалил эту папку и делает неправильные действия.
Теперь у меня было несколько идей:
1.) Рекурсивно удалить папку, удалив каждый файл и каждую папку отдельно. При этом я получаю для каждой подпапки и подаю собственную запись списка. Я уже реализовал это, но это очень очень очень медленно.
2.) Может быть, есть лучший способ использовать умные фильтры в FileSystemWatcher
, чтобы сделать мой список устаревшим?
3.) Может быть, возможно удалить только дерево каталогов, если возможно удалить все. Так что, если это не удается, у меня все еще есть, а если не все удаляется. Мне кажется, это самое элегантное решение, но не знаю, возможно ли это вообще?
4.) Можно ли заблокировать все файлы и папки исключительно моим программным обеспечением? Если все прошло нормально, можно удалить все одной командой delete или как-то так?
Я также открыт для других дополнительных решений.
Отредактируйте 1, чтобы сделать его более понятным:
Я хочу только "видеть" действия пользователя в папке. Если я манипулирую вещами из своей программы здесь, я не хочу видеть эти события.
В моей реализации я получаю события для подпапок, если папка заблокирована и не может быть удалена.
Это не так просто объяснить на английском, потому что я не являюсь носителем английского языка;).
Редактировать 2:
5.) Может быть, можно FileSystemWatcher
отфильтровать все события из определенного процесса?