Когда вы сохраняете текстовый файл, меняете его содержимое, сохраняете снова и нажимаете кнопку аппаратной перезагрузки, у файла есть высокий шанс испортиться (!) (весь контент превратился в \0 символов). Я могу воспроизвести это на разных машинах, используя Windows 7, 8.1 и 10, даже если я подожду несколько секунд, закрою файл или даже закрою приложение. Я пробовал это делать с помощью Блокнота, Блокнота ++, Paint, копирования файлов в проводнике и наивного приложения для чтения / записи файлов UWP. Я был озадачен, когда впервые увидел такое поведение, и не понимаю, почему в 2017 году вы все еще не можете рассчитывать на сохранение ваших файлов после внезапной потери питания.
- Стоит ли ожидать, что файлы будут повреждены при внезапном отключении питания?
- Когда и как вы узнаете, сохранился ли файл «по-настоящему» на жестком диске?
- Почему файлы по-прежнему так портятся и какие сети безопасности должны это предотвратить?
- Если при каких обстоятельствах будут задействованы сети безопасности, могут ли они выйти из строя?
Я предполагаю, что файлы на самом деле не записываются в назначенное им место при использовании операции file_write(), потому что происходит некоторое кэширование и журналирование, и в конце операционная система и / или контроллер диска решают, когда это будет сделано. Но я думал, что, в частности, журнал был изобретен, чтобы предотвратить это. А фактическая запись в файл должна происходить при вызове операции file_flush() или file_close().
Обновление: в Windows есть опция -> Диспетчер устройств -> Дисководы -> MyDiskDrive -> Свойства -> Политики -> [x] Включить кэширование записи на устройстве
Повышение производительности системы за счет включения кэширования записи на устройстве, но перебои с питанием или отказ оборудования могут привести к потере или повреждению данных
Это точно соответствует описанному выше поведению, за исключением того, что даже если я отключу кэширование записи, произвожу чистую перезагрузку и снова проверяю, файлы по-прежнему повреждаются. WTF?