#c# #crash
#c# #сбой
Вопрос:
У меня есть приложение, которое хранит зашифрованный документ в формате XML, каждый раз, когда приложение хочет получить доступ к файлу XML, который оно должно (расшифровать -> прочитать -> записать -> зашифровать). если внезапное завершение работы или перезапуск даже конечной задачи из диспетчера задач приведет либо к повреждению данных в XML, либо к незашифрованному XML-файлу, поэтому при следующем запуске это приведет к ошибке.
Я подумал о том, чтобы сохранить все содержимое XML в базе данных и проверить, есть ли какие-либо ошибки, а затем заменить старое содержимое.
Любые идеи, советы или мысли приветствуются.
Ответ №1:
Вы должны выполнить дешифрование / шифрование в памяти. Никогда, никогда не храните незашифрованные данные на диске. Загрузите зашифрованные данные, расшифруйте их в памяти. При сохранении сначала зашифруйте в памяти, затем сохраните.
Замена всего содержимого файла безопасным способом даже в случае внезапного завершения работы является сложной задачей. Обходной путь заключается в создании нового файла под временным именем, а когда он будет полностью записан на диск, удалите старый файл и переименуйте новый. Однако это может иметь и другие последствия, такие как права безопасности, относящиеся к потерянному файлу.
Лучший, но более продвинутый вариант — переместить все в базу данных с поддержкой транзакций.
Комментарии:
1. 1. Поддержка транзакций может включать журналы, которые можно использовать, какой шаг цепочки был выполнен или нет. Хорошая идея.
2. Можете ли вы опубликовать простой пример, как хранить данные в памяти и считывать их, и можете ли вы объяснить поддержку транзакций.
3. @user733659: проверьте класс MemoryStream. Он ведет себя как поток файлов, но сохраняет данные в памяти, а не на диске. В большинстве мест, где используется FileStream, вместо него можно использовать MemoryStream.