Мне приходилось иметь дело с чем-то похожим;по сути, встроенная система, работающая в Windows, где ожидается, что питание может быть отключено в любое время.
На практике я понимаю, что файл записывается на диск менее чем за 10 секунд до потери.of-power означает, что файл будет поврежден.(Я использую 30 секунд в своем коде, чтобы воспроизвести его безопасно).
Я не знаю ни одного способа гарантировать из кода, что файл был полностью закрыт, записан на диск и что оборудование диска завершеноего пишет.Кроме того, чтобы знать, что прошло 10 (или 30) секунд.Это не очень удовлетворительная ситуация, но она есть.
Вот несколько указателей, которые я использовал в реальном встроенном проекте ...
- Используйте систему контрольных сумм ифайлы резервных копий.
- Контрольные суммы: в конце любого файла, который вы пишете, включите контрольную сумму (если это пользовательский XML-файл, возможно, включите какой-либо тег
<checksum .../>
).Затем при чтении, если тег контрольной суммы отсутствует или не соответствует данным, вы должны отклонить файл как поврежденный. - Резервные копии: каждый раз, когда вы пишете файл, сохраняйте копию в одномиз двух резервных копий;произнесите A и B. Если A существует на диске, но ему менее 30 секунд, вместо этого скопируйте в B.Затем, прочитав, сначала прочтите исходный файл.Если поврежден, то читайте A, если поврежден, то читайте B.
Также
- Если это встроенная система, вам нужно запустить команду DOS "chkdsk / F"на диске, на который вы записываете, при загрузке.Потому что, если вы получаете поврежденные файлы, то вы также получите поврежденную файловую систему.
- Дисковые системы NTFS должны быть более устойчивыми к ошибкам, чем FAT32.Но я считаю, что NTFS-дискам также может потребоваться больше времени для полной очистки их данных.Я использую FAT32, когда могу.
Заключительная мысль: если вы действительно используете встроенную систему под Windows, вам лучше узнать больше о Windows Embedded и системе Enhanced Write Filter.