Сравнение текущего состояния папки с сохраненным предыдущим состоянием (C #) - PullRequest
2 голосов
/ 25 февраля 2010

Я хочу создать приложение winform, которое будет сообщать вам всякий раз, когда вы открываете его, обо всех изменениях, которые были сделаны с момента последнего открытия, и, возможно, записывать его журнал, например:

  • Создание файлов / папок
  • Переименование файлов / папок
  • Исключения файлов / папок

Я решил, что должен выполнить четыре задачи:

  • Сохранение состояния папки (дерева) в перезагружаемый формат
  • Загрузить эту информацию обратно
  • Сравните эту информацию с текущей состояние собрано по мере необходимости
  • Перечислите изменения, зарегистрируйте и отобразите их

У меня есть несколько идей, что вы можете мне помочь?

(я против 08 и .NET 3.5)

--- [EDIT] ---
Переименование должно быть невозможным, это может быть просто исключение и создание, поскольку папки не имеют уникальных идентификаторов в Windows.

--- [EDIT] ---
Реальная цель этого - изучение, и если оно работает, я могу также использовать его и обрабатывать исходный код или что-то еще, извините, что не упомянул об этом раньше, я не заинтересован в готовых решениях.
Я хочу посмотреть сетевую общую папку, в которой у меня уже есть приложение (которое я уже сделал), в котором есть FileSystemWathcer для всплывающего сообщения в трее каждый раз, когда что-то происходит в любом файле или любой папке / подпапке .
То, что я хочу, это возможность сравнить предыдущее и текущее состояние в отдельном приложении (изначально) и, если оно будет выполнено успешно, внедрить его в текущее работающее приложение. Но это совершенно не имеет значения для вопроса.

Ответы [ 3 ]

1 голос
/ 26 февраля 2010

Мое предложение - сериализовать состояние в файл XML. Используйте XML Diff для создания диаграммы и извлечения информации из диаграммы, созданной для отображения. Если у вас правильная вложенная структура, diffgram выполнит сопоставление элементов, и это сэкономит вам много времени на написание собственного сравнения папок-папок и рекурсивного сравнения подпапок. Все, что вам нужно, это выяснить, как затем переварить полученную дифграмму, которая обычно довольно прямолинейна. Каждый элемент обычно помечается атрибутом, указывающим, что он изменен, добавлен или удален.

0 голосов
/ 26 февраля 2010

Такое приложение уже существует. Он называется Subversion , а также существует очень хороший клиент для Windows под названием TortoiseSVN .

Если вам нужно знать, какие функции нужны вашей программе, или не знаете, как должен создаваться пользовательский интерфейс, взгляните на их документацию ( subversion doc , tortoise doc ) или даже исходный код .

Обновление

Так что, если вы просто хотите сделать это самостоятельно в учебных целях, вам также следует взглянуть на документы или исходный код, чтобы получить представление о том, как они выполняли эту задачу (например, создание скрытой подпапки, в которой старая папка состояние сохранено), чтобы понять, как вы можете решить эту проблему для себя.

0 голосов
/ 26 февраля 2010

Это хороший путь.

Другая идея заключается в использовании журнала изменений NTFS, как описано в MSJ, сентябрь 99 и MSJ, октябрь 99 . Первый запуск приложения должен включить журнал для нужного тома, и все готово. Последующие прогоны читают журнал и извлекают информацию об изменениях для интересующего каталога.

Обратите внимание, что это сложнее, чем кажется, поскольку API довольно низкого уровня. И есть очень маленький риск, что кто-то выключит журнал между прогонами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...