Мой компьютер недавно внезапно выключился. Когда я снова включил его, я обнаружил, что некоторые из двоичных файлов, которые я написал, когда компьютер работал в последний раз, были повреждены. Я исследовал это и обнаружил, что это связано с тем, что данные, записанные с использованием fwrite
, не гарантируют немедленной записи на диск. Мне сказали, что для того, чтобы сохранить свои данные без риска потерять их в случае очередного внезапного отключения электроэнергии, я должен воспользоваться функцией fsync
. Но похоже, что это только для Unix/Linux, расположенное в unistd.h
. Я на Windows, как мне сделать эквивалент fsync
на Windows?
Я хочу защитить данные, записанные с помощью простой программы, следующим образом:
void WriteBinFile(float var1, float var2, float var3)
{
FILE *fp;
fopen_s(&fp, "filename.dat", "wb");
fwrite((void*)&var1, sizeof(float), 1, fp);
fwrite((void*)&var2, sizeof(float), 1, fp);
fwrite((void*)&var3, sizeof(float), 1, fp);
// fsync(fp) ??? No such function exists on Windows. Here I want a facility to write data to disk in non-volatile manner.
fclose(fp);
}
P.S. Почему у меня нет ИБП - долгая и неинтересная история. Также я на Windows 8.1 и использую Visual Studio 2013. Также файлы, которые пострадали из-за резкого отключения питания, содержали 0
s. Некоторые из них были заполнены 0
, а некоторые лишь частично заполнены 0
. Я не писал 0
s в файл, так что это точно следствие отключения электричества
0
, а это не то, что я им написал. Итак, я думаю, что я потерял данные, а не испортил их. Я использовал это слово повреждено, потому что я объединил их, когда писал вопрос. - person The Vivandiere   schedule 15.09.2015void *
. - person too honest for this site   schedule 15.09.2015