Использовать Flush (True) и FlushFileBuffers оба? - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу записать в файл и немедленно записать на диск.

Другие вопросы по SO указывали на то, что Flush (True) не надежен в .NET 4.0.Я действительно использую .NET 4.0 и не могу обновить в ближайшее время.

Является ли FlushFileBuffers надежным?или известно, что в ней тоже есть ошибка?

Есть ли вариант, который я могу использовать, или я должен использовать оба, и надеюсь на лучшее?

1 Ответ

0 голосов
/ 16 ноября 2018

Полагаю, "ошибка", о которой вы говорите, эта :

.NET Framework 4.0 представила новую FileStream.Flush (bool flushToDisk) перегрузку . Если для flushToDisk установлено значение true, изменения должны быть сохранены на диске.

Однако во многих случаях (если указатель внутреннего буфера равен 0) изменения не фиксируются на диске, и вызов Flush (true) абсолютно ничего не делает.

Если приложения используют FileStream.Flush (true), работающий, как описано, это может привести к проблемам с повреждением данных.

но согласно Есть ли официальное исправление (он же KB) для ошибки FileStream.Flush, представленной в .Net 4 , исправленной в 4.0.3:

... Насколько я могу судить, это исправлено в .NET Framework Update 4.0.3, хотя это и не упоминается в КБ.

...