Принцип работы FileFlush() - страница 2

 

FileFlush и FileClose моментально и гарантированно сбрасывают все накопленные данные из буфера в файл. Исключение из гарантии составляет случай, когда на диске нет места, но в этом случае Вы не сможете выполнить FileWrite. Так что, всё что накоплено в буфере моментально сбрасывается в файл.

После этого все другие программы могут читать сброшенные в файл данные, если файл закрыт. Если файл не закрыт (вызвали FileFlush), то он должен быть открыт с расшаренным доступом по чтению (FILE_SHARE_READ). Гарантированно, данные - в файле. Все данные файла доступны другим программам

Второй вопрос. Момент, когда данные файла чисто физически записывается на диск. Это уже зависит от операционной системы и контроллера диска.

 
Ясно, спасибо. Если так, то хорошо. Но как-то слишком разные Ваш ответ и Рената.
 
pavlick_:
Ясно, спасибо. Если так, то хорошо. Но как-то слишком разные Ваш ответ и Рената.

Повторяю. Нюансы именно в операционной системе и контроллере диска.

Вот мы дадим Вам 100-процентную гарантию, а Ваш диск про нашу гарантию ничего не знает...

 
Slawa:

FileFlush и FileClose моментально и гарантированно сбрасывают все накопленные данные из буфера в файл. Исключение из гарантии составляет случай, когда на диске нет места, но в этом случае Вы не сможете выполнить FileWrite. Так что, всё что накоплено в буфере моментально сбрасывается в файл.

Эмм

Renat Fatkhullin:

Да, фактически мы отключили сброс кешей по FileFlush, так как им почти никто не умеет пользоваться, убивает диск и производительность нашей системы.

...

Если реально хотите сбрасывать данные на диск, то закрывайте файл.

Это два диаметрально противоположных ответа. И как-то Ренату побольше доверия будет

 
Комбинатор:

Эмм

Это два диаметрально противоположных ответа. И как-то Ренату побольше доверия будет

всё что накоплено в буфере моментально сбрасывается в файл

Второй вопрос. Момент, когда данные файла чисто физически записывается на диск. Это уже зависит от операционной системы и контроллера диска.

 

Вызов FileFlush в MQL5 вызывает запись наших внутренних накопленных буферов на диск с помощью WinAPI функции WriteFile.

Хотя реальным сбросом на диск управляет сама операционка и на самом деле она может фактически сбросить переданные данные на диск когда сама решит, в реальности вы сразу же увидите, что данные записаны на диск. То есть, проблемы нет - вызов FileFlush из MQL5 нормальным щадящим методом работает как вы хотите.


А вот реальный вызов WinAPI функции FlushFileBuffers мы не делаем(игнорируем), так как это очень дорогая по времени функция и по всей видимости она запускает какой-то каскад тяжелой работы по сбросу и проверке данных. Программисты об этом не знаю, ставят куда не попадя эту команду и убивают всю производительность. FlushFileBuffers мы вызываем только для Pipe файлов, где иначе нельзя.

Поэтому и объяснения Славы правы что все хорошо и мои утверждения тоже корректны.

 
В четверке аналогично.
 
Renat Fatkhullin:

Поэтому и объяснения Славы правы что все хорошо и мои утверждения тоже корректны.

При CloseHandle FlushFileBuffers тоже не вызывается. Значит ли это что FileFlush и FileClose по сути равноценны с точки зрения сохранности данных?
 
Комбинатор:
При CloseHandle FlushFileBuffers тоже не вызывается. Значит ли это что FileFlush и FileClose по сути равноценны с точки зрения сохранности данных?
Конечно равноценны.
 
Slawa:

FileFlush и FileClose моментально и гарантированно сбрасывают все накопленные данные из буфера в файл. Исключение из гарантии составляет случай, когда на диске нет места, но в этом случае Вы не сможете выполнить FileWrite. Так что, всё что накоплено в буфере моментально сбрасывается в файл.

После этого все другие программы могут читать сброшенные в файл данные, если файл закрыт. Если файл не закрыт (вызвали FileFlush), то он должен быть открыт с расшаренным доступом по чтению (FILE_SHARE_READ). Гарантированно, данные - в файле. Все данные файла доступны другим программам

Второй вопрос. Момент, когда данные файла чисто физически записывается на диск. Это уже зависит от операционной системы и контроллера диска.

Так об этом и спрашивали. Тут ситуация такая - FileFlush ничего никуда физически не пишет, мы живем не во времена DOS )) Он дает команду Windows скинуть буфер на диск. А там уже Винда хозяйка и сама решает, когда скинуть в зависимости от занятости.
Причина обращения: