![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
FileFlush и FileClose моментально и гарантированно сбрасывают все накопленные данные из буфера в файл. Исключение из гарантии составляет случай, когда на диске нет места, но в этом случае Вы не сможете выполнить FileWrite. Так что, всё что накоплено в буфере моментально сбрасывается в файл.
После этого все другие программы могут читать сброшенные в файл данные, если файл закрыт. Если файл не закрыт (вызвали FileFlush), то он должен быть открыт с расшаренным доступом по чтению (FILE_SHARE_READ). Гарантированно, данные - в файле. Все данные файла доступны другим программам
Второй вопрос. Момент, когда данные файла чисто физически записывается на диск. Это уже зависит от операционной системы и контроллера диска.
Ясно, спасибо. Если так, то хорошо. Но как-то слишком разные Ваш ответ и Рената.
Повторяю. Нюансы именно в операционной системе и контроллере диска.
Вот мы дадим Вам 100-процентную гарантию, а Ваш диск про нашу гарантию ничего не знает...
FileFlush и FileClose моментально и гарантированно сбрасывают все накопленные данные из буфера в файл. Исключение из гарантии составляет случай, когда на диске нет места, но в этом случае Вы не сможете выполнить FileWrite. Так что, всё что накоплено в буфере моментально сбрасывается в файл.
Эмм
Да, фактически мы отключили сброс кешей по FileFlush, так как им почти никто не умеет пользоваться, убивает диск и производительность нашей системы.
...
Если реально хотите сбрасывать данные на диск, то закрывайте файл.
Это два диаметрально противоположных ответа. И как-то Ренату побольше доверия будет
Эмм
Это два диаметрально противоположных ответа. И как-то Ренату побольше доверия будет
всё что накоплено в буфере моментально сбрасывается в файл
Второй вопрос. Момент, когда данные файла чисто физически записывается на диск. Это уже зависит от операционной системы и контроллера диска.
Вызов FileFlush в MQL5 вызывает запись наших внутренних накопленных буферов на диск с помощью WinAPI функции WriteFile.
Хотя реальным сбросом на диск управляет сама операционка и на самом деле она может фактически сбросить переданные данные на диск когда сама решит, в реальности вы сразу же увидите, что данные записаны на диск. То есть, проблемы нет - вызов FileFlush из MQL5 нормальным щадящим методом работает как вы хотите.
А вот реальный вызов WinAPI функции FlushFileBuffers мы не делаем(игнорируем), так как это очень дорогая по времени функция и по всей видимости она запускает какой-то каскад тяжелой работы по сбросу и проверке данных. Программисты об этом не знаю, ставят куда не попадя эту команду и убивают всю производительность. FlushFileBuffers мы вызываем только для Pipe файлов, где иначе нельзя.
Поэтому и объяснения Славы правы что все хорошо и мои утверждения тоже корректны.
Поэтому и объяснения Славы правы что все хорошо и мои утверждения тоже корректны.
При CloseHandle FlushFileBuffers тоже не вызывается. Значит ли это что FileFlush и FileClose по сути равноценны с точки зрения сохранности данных?
FileFlush и FileClose моментально и гарантированно сбрасывают все накопленные данные из буфера в файл. Исключение из гарантии составляет случай, когда на диске нет места, но в этом случае Вы не сможете выполнить FileWrite. Так что, всё что накоплено в буфере моментально сбрасывается в файл.
После этого все другие программы могут читать сброшенные в файл данные, если файл закрыт. Если файл не закрыт (вызвали FileFlush), то он должен быть открыт с расшаренным доступом по чтению (FILE_SHARE_READ). Гарантированно, данные - в файле. Все данные файла доступны другим программам
Второй вопрос. Момент, когда данные файла чисто физически записывается на диск. Это уже зависит от операционной системы и контроллера диска.