- www.mql5.com
- Нужна помощь помощьо по WriteFile из kernel32.dll
- Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
- Результат оптимизации != Одиночному тесту по результатам оптимизации.
Как записать в файл но при этом не пересоздавать его ? Какие флаги нужно для этого поставить, подскажите плиз. Я пишу в файл используя флаги FILE_CSV|FILE_ANSI|FILE_COMMON (https://www.mql5.com/ru/docs/constants/io_constants/fileflags) но файл при открытии пересоздается и все записанные денные теряются... Как сделать так что бы он просто открывался и строки добавлялись ?
- www.mql5.com
Как записать в файл но при этом не пересоздавать его ? Какие флаги нужно для этого поставить, подскажите плиз. Я пишу в файл используя флаги FILE_CSV|FILE_ANSI|FILE_COMMON (https://www.mql5.com/ru/docs/constants/io_constants/fileflags) но файл при открытии пересоздается и все записанные денные теряются... Как сделать так что бы он просто открывался и строки добавлялись ?
Если разрешена запись, то она выполняется с текущей позиции в файле. Также, как и чтение. Чтобы писать или читать не с начала, а с нужного места, нужно задать ненулевую позицию в файле (смещение от начала в байтах).
Если нужно добавлять в конец файла, нужно перед записью переместить текущую позицию на конец файла. FileSeek(fi, 0, SEEK_END);
Вообще-то, просто. Выше написали как.
Но, в МТ всего один поток и эксперт-индикатор, если пишет в файл приостанавливается. Иногда это критично, иногда нет. Когда это критично - делаем ДЛЛ, организуем там отдельный поток для записи файла, и из МТ вызываем функцию ДЛЛ, в которую передаем строку(и) для записи. Функция создает поток для записи и завершает работу. Все, поток МТ свободен, дальше разберутся без него.)
Вообще-то, просто. Выше написали как.
Но, в МТ всего один поток и эксперт-индикатор, если пишет в файл приостанавливается. Иногда это критично, иногда нет. Когда это критично - делаем ДЛЛ, организуем там отдельный поток для записи файла, и из МТ вызываем функцию ДЛЛ, в которую передаем строку(и) для записи. Функция создает поток для записи и завершает работу. Все, поток МТ свободен, дальше разберутся без него.)
Благодарю, но с dll не буду заморачиваться. Мне не нужно что бы несколько экспертов в один файл писали, достаточно будет просто добавления записей в файл, как выше написали. Я для логов делаю, на робота по логу будет довольно логично и правильно. Если все боты в один лог файл будут писать, тот это неразбериха какая то будет).
Благодарю всех за советы, помогли. Касательно описанного выше способа, выяснил одно дополнение (вдруг кому пригодится),нужно обязательно ставить флаг чтения файла(FILE_READ), иначе файл все равно пересоздается.
Т.е. всегда перед записью ставить следующее: FILE_CSV|FILE_ANSI|FILE_COMMON|FILE_READ|FILE_WRITE
(Ну расширение, тип записи и папку конечно по усмотрению делать.)
Если все боты в один лог файл будут писать, тот это неразбериха какая то будет).
Использовать-не использовать - это дело хозяйское. Но отчего Вы считаете, что все должно (будет) писаться в один файл? Куда направите, туда и будет писаться, Хоть в 10 файлов.)
Это то понятно, но просто после прочтения вашего комментария, я так понял, что вы предлагаете решение проблемы когда из нескольких потоков MT5 пишутся данные в разделяемый рессурс - файл.
Но у меня задача была более тривиальное, что бы один поток управлял одним файлом, но не перезаписывал его, а просто дополнял записи...
Это то понятно, но просто после прочтения вашего комментария, я так понял, что вы предлагаете решение проблемы когда из нескольких потоков MT5 пишутся данные в разделяемый рессурс - файл.
Но у меня задача была более тривиальное, что бы один поток управлял одним файлом, но не перезаписывал его, а просто дополнял записи...
Да, я понял. Под С++ с этим (добавлением) вообще нет вопросов, а файлы под MQL я как-то забросил. Стоит один раз сделать ДЛЛ и отказаться уже невозможно, типа как от курения.))
А написал, м.б. кому пригодится.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования