Как убедиться, что файл был постоянно сохранен на USB, когда пользователь не использует & # 8220; Safely Remove Hardware & # 8221 ;?
Вопрос
Когда я сохраняю файл на USB-накопителе в своем приложении delphi, как я могу убедиться, что файл действительно (навсегда) сохранен на USB-диске, когда " Безопасное извлечение устройства " не выполняется (особенно забыто использовать)?
Сообщаем нашим клиентам использовать функцию Windows «Безопасное извлечение оборудования». не работает.
Есть ли команда Windows API для очистки буфера, чтобы все данные постоянно записывались на USB-накопитель?
Решение
Вот функция, которую я использовал для сброса данных на USB-накопитель перед его программным извлечением. Эта функциональность клонов из Марка Руссиновича " Синхронизация " утилита . У меня не было проблем с этим кодом, и он работал на многих системах в течение нескольких лет.
Другие советы
Когда вы откроете файл, укажите " писать через " (FILE_FLAG_WRITE_THROUGH флаг для CreateFile ()). Это заставит ОС записывать файл напрямую. Возможно, он все еще находится в кэше ОС для ускорения последующих операций чтения, но это не проблема для вас. Р>
Если вы хотите очистить файловые буферы, всегда есть FlushFileBuffers () р>
что бы ни случилось, вы можете отключить устройство самостоятельно, я имею в виду программно. тогда вы будете полностью уверены, что они правильно удалили устройство.
посмотрите на ответы на этот вопрос: safe-remove-usb -Драйв-используя-win32-апи . особенно эта ссылка на статью msdn kb приведена в ответ.