2009-02-25 2 views
0

Im программирование win32 с использованием fopen fread fwrite в C.commit пишет

Как заставить окна записывать данные на диск? Это не вызов API для этого?

У меня есть программа, которая должна обязательно убедиться, что данные сохранены на диск до того, как они сохранятся в другом файле индексации, иначе, если есть сбои, индексный файл иногда может обновляться, но другой файл не вызывает плохой несогласованности ,

ответ

2

fflush() делает, что вы хотите. Если вы решите использовать API Win32 для ввода IO файла вместо C CDI, тогда поставьте флаг FILE_FLAG_WRITE_THROUGH в CreateFile(), который делает именно то, что вы хотите.

0

См. Функцию _commit. Также в this other MSDN page. Это работает только с функциями _open и другими функциями, поэтому см. this article - вы можете связать свою программу с commode.obj, чтобы заставить fflush зафиксировать на диске.

+0

Я все еще хихикаю всякий раз, когда вижу это имя файла объекта. – Crashworks

0

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