У меня есть программа, которая следит за изменениями определенных файлов в списке папок, включая дочерние (если папка просматривается, она будет наблюдать за всеми дочерними файлами). Я хочу добавить возможность исключать определенных детей из этого процесса, но я не уверен, как лучше всего это обработать или сохранить «Правила» для этого. Например, вот дерево, которое я мог бы посмотреть:
Root
Folder1
SubFolder1
File1
File2
Folder2
File3
File4
Я хочу разрешить пользователю выбирать папку (например, «Root»), и она автоматически выбирает все дочерние элементы. Если они снимают флажок с папки (например, Folder1), я хочу снять флажок со всех дочерних элементов этого, но затем, если они проверяют дочерний элемент у ребенка (например, File1), я хочу проверить все его дочерние элементы (или, в этом случае просто посмотрите File1, так как у него нет детей).
Я представляю, что буду хранить эти данные в виде списка узлов, на которых пользователь предпринял какое-то действие (или +, или -), и буду ходить по списку папок, по одному уровню за раз, пока не получу к узлу, где пользователь предпринял другое действие, затем продолжайте идти дальше в папки / файлы, проверяя на каждом шаге, чтобы увидеть, предпринял ли пользователь какие-либо действия на этом узле, в частности, и затем распространяя его на все подчиненные -nodes. Если под отслеживаемым узлом появляется новая папка / файл, я хочу начать его просмотр, но если он появится под игнорируемым узлом, я его проигнорирую.
Должен ли я просто сохранять каждую "действующую" папку / файл, а также действие (просмотр / игнорирование), которое выполнял пользователь, и затем каждый раз восстанавливать целое дерево? Есть ли более эффективный способ сделать это, что я не представляю?
Я с удовольствием уточню, неясно ли мое текущее объяснение того, как я представляю это. Кроме того, я использую .NET, но меня больше интересует общий процесс - я разработаю реализацию.