Резервное копирование файлов конфигурации - PullRequest
2 голосов
/ 08 января 2010

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

Я думал о 2 решениях:

1) Транзакционный NTFS API (например, CreateFileTransacted () ), но эта вещь работает только в Vista, и NTFS должна присутствовать, и я не могу использовать его в большинстве случаев

2) Чтобы создать резервную копию файла конфигурации в каталоге% APPDATA%, скажем, 20 резервных копий и восстановить их при запуске приложения при обнаружении поврежденного файла конфигурации

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

1 Ответ

2 голосов
/ 08 января 2010

Вам действительно не нужно 20 резервных копий. Вам нужна только 1 - последняя копия. Теперь, если ваш клиент действительно запрашивает базовую систему управления версиями для файлов конфигурации, это уже другая история. Но для того, чтобы иметь хороший конфигурационный файл, вам нужна только 1 резервная копия.

Теперь вот что я делал для своих встроенных проектов:

  1. Рассчитать хеш файла конфигурации и сохранить его в файле. Проще всего добавить его в конец файла в качестве комментария. Я использовал для этого crc32, но в эти дни я бы использовал SHA1. Это может даже быть сделано автоматически с помощью инструмента config-uploader непосредственно перед передачей / сохранением файла конфигурации.

  2. При открытии файла конфигурации извлеките хеш и сравните его со значением, вычисленным из файла (очевидно, вычисленным после удаления хеша из файла). Если хеша нет, то файл неполный. Если хеш-код не совпадает, файл поврежден. В любом случае используйте более старый файл.

  3. Теперь, когда проверен правильный и правильный файл конфигурации, он может заменить старый файл конфигурации. Для этого используйте операцию переименования ОС. Обычно это атомарно в большинстве современных файловых систем, поэтому неудачное переименование не заглушит старый файл.

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

...