Как удостовериться, что все данные были физически записаны в диск?

Мне нравится объяснение Джеспера в неспециалистических терминах

. Импровизируя примеры из ответа Йеспера,

class House {
// blue print for House Objects
}

class Car {
// blue print for Instances of Class Car 
}

House myHouse = House new();
Car myCar = Car new();

myHouse и myCar являются объектами

myHouse - это экземпляр of House (связывает Object-myHouse с его классом) myCar является экземпляром Car

коротким

«myHouse - это экземпляр класса House», который аналогичен сказанному « myHouse - это объект типа House "

19
задан Stefan Schultze 20 December 2008 в 13:32
поделиться

3 ответа

В соответствии с Windows, посмотрите FlushFileBuffers (Win32 API).

8
ответ дан 30 November 2019 в 00:40
поделиться

Ну, Вы могли закрыть файл..., который, вероятно, сделает это. В действительности, с абстракцией HAL, виртуализацией и дисковыми аппаратными средствами, теперь имеющими больше вычислительной мощности и кэш-памяти, чем , который компьютеры сделали несколько лет назад, Вы оказываетесь перед необходимостью жить с надеждой, что диск делает свое задание.

транзакционная файловая система, никогда действительно осуществленная;-p, Конечно, Вы могли, возможно, посмотреть на использование базы данных как бэкэнд и использовать систему транзакции этого?

В стороне: обратите внимание, что не все потоки даже гарантируют Flush() - например, GZipStream и т.д. сохраняют рабочий буфер незафиксированных данных даже после сброса - единственный способ заставить это сбрасывать , все к Close() это.

3
ответ дан 30 November 2019 в 00:40
поделиться

Существует просто слишком много уровней абстракции, чтобы быть абсолютно уверенными, что данные записаны в диск, право вниз на аппаратный уровень.

Не блестяще производительный или надежный, но как насчет того, чтобы вновь открыть файл, после того как это записано в отдельном процессе и проверке размера или содержания?

-2
ответ дан 30 November 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: