Если файл автосохранения каким-либо образом поврежден (я предполагаю, что отключение питания, когда файл находится в процессе сохранения, сделает это?), Пользователь потеряет свою работу.Как я могу предотвратить такие ситуации и сделать все возможное, чтобы гарантировать, что автосохранение документа находится в согласованном состоянии?
Чтобы предотвратить потерю данных из-за частично записанного файла автосохранения, не перезаписывайте автосохранениефайл.Вместо этого каждый раз записывайте в новый файл, а затем переименовывайте его, как только файл был благополучно записан.
Чтобы не замечать, что файл автосохранения записан неправильно:
- Обратите внимание на исключения, возникающие при записи и закрытии файла автосохранения в случае ошибки диска, переполнения файловой системы и т. Д.
- Сохраните текущую контрольную сумму файла в том виде, в котором она была записана, и запишите ееконец файла.Затем, когда вы загружаете файл автосохранения, проверьте, что контрольная сумма существует и является правильной.
Если состояние контрольной точки включает несколько файлов, убедитесь, что вы записываете файлы в хорошо известном порядке (без перезаписи).!) и запишите контрольную сумму в файл автосохранения после того, как все остальные файлы будут надежно закрыты.Возможно, вы захотите создать каталог для каждой контрольной точки.
СЛЕДОВАТЬ ВВЕРХ
Нет.Я не говорю, что переименовать всегда удается.Тем не менее, является атомарным - он либо успешно (и завершается), либо файловая система не изменяется.Итак, если вы сделаете это:
- напишите "file.new" и закройте,
- удалите "file",
- переименуйте "file.new" в "файл "
, затем при условии успешного выполнения первого шага вы гарантированно сохраните последний" файл "на диске.И просто добавить пару шагов, чтобы у вас всегда была резервная копия «файла».(Если на третьем шаге ничего не получится, у вас останется «file.new» и нет «file». Это может быть восстановлено вручную или автоматически приложением при следующем запуске.)
Кроме того, я 'Я не говорю, что запись всегда выполняется успешно, или что приложения не аварийно завершают работу, или что питание никогда не отключается.И смысл контрольной суммы в том, чтобы позволить вам обнаружить случаев, когда эти вещи произошли, а файл автосохранения неполон.
Наконец, это хорошая идея, чтобы иметь два автосохранения вЕсли ваше приложение попадает в состояние, когда его структуры данных испорчены, а последнее автосохранение в результате не имеет смысла.(Контрольная сумма не защитит от этого.) Будьте осторожны с автосохранением при сбое приложения по той же причине.