Насколько замечал, всегда так - если не закрыть файл, то все, что в него писалось после открытия не сохраняется, даж если не свет отключить, а аварийно завершить работу программы. А насчет того, чтобы разгрести этот мусор - задача интересная:-)
Это стандартная проблема для любой программы, работающей с открытыми файлами.
Как простое решение - переоткрывать файл каждую минуту (не на каждый тик).
Как простое решение - переоткрывать файл каждую минуту (не на каждый тик).
А что изменится?
Если в момент "аварии" файл будет открыт, в него всё равно попадёт мусор.
Или я ошибаюсь?
Если в момент "аварии" файл будет открыт, в него всё равно попадёт мусор.
Или я ошибаюсь?
Интересно, елси файл открыт для чтения, то в него тоже может попасть
мусор?
Если иметь 2 файла и писть в них одно и то же, то испортиться может
только один.
SK. писал (а):
У меня было открыто 2 файла. И испортились оба.
Интересно, елси файл открыт для чтения, то в него тоже может попасть
мусор?
Если иметь 2 файла и писть в них одно и то же, то испортиться может
только один.
а если собирать тики в массив, затем раз в минуту сбрасывать в файл, тогда вероятность аварийного завершения работы при открытом файле значительно снижается. А если иметь два файла, то в один момент времени открыт только один, поэтому мусор может попасть только в один файл. Остается задача - при запуске сборщика определить в каком из них есть мусор, а в каком нет.
С массивом - вариант. Надо подумать над реализацией.
Вероятность действительно будет минимальной
Вероятность действительно будет минимальной
Integer писал (а):
а если собирать тики в массив, затем раз в минуту сбрасывать в файл, тогда вероятность аварийного завершения работы при открытом файле значительно снижается. А если иметь два файла, то в один момент времени открыт только один, поэтому мусор может попасть только в один файл. Остается задача - при запуске сборщика определить в каком из них есть мусор, а в каком нет.
а если собирать тики в массив, затем раз в минуту сбрасывать в файл, тогда вероятность аварийного завершения работы при открытом файле значительно снижается. А если иметь два файла, то в один момент времени открыт только один, поэтому мусор может попасть только в один файл. Остается задача - при запуске сборщика определить в каком из них есть мусор, а в каком нет.
Раз в минуту - это то, что предлагает Renat.
Я говорю о том, чтобы записывать информацию в 2 одинаковых файла - сначала в один ( и закрыть), а потом - в другой.
Если ПК взорвётся в какой-то момент, то это может повредить лишь одному из открытых файлов.
SK, я предложил массив не в качестве альтернативы второго файла,
а в дополнение. Моя фраза "А если иметь " - неудачная. Сверхнадежно
делать массив и два файла. Только надо найти способ определить
наличие мусора в файле.
Флаг, включаемый перед записью, и обнуляемый после успешного
закрытия?
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Алгоритм простой - открываем цсв-файл, пишем тики, сбрасываем на диск. В деините - закрываем файл.
Эксперт работает круглосуточно.
Вчера ночью выключили свет, вместе с ним выключился и комп (странно, правда? =).
Утром я запустил МТ, и обнаружил в файлах с тиками кучу "мусора": от случайных нечитаемых символов, до кусков кода и логов терминала.
Есть подозрение, что в файл записалось всё, что когда-то было в буфере обмена.
Хотя, не уверен...
К сожалению, мусор я сразу удалил, сохранить кусок для анализа не додумался.
Но, думаю, воспроизвести ситуацию будет не сложно =)
Вопрос, собственно, в следующем: нормальная ли это ситуация, и можно ли с этим что-то сделать (кроме закрытия файла каждый тик)?
МТ билд 194 от 15.06.2006, WinXP SP2