MQL – глючная работа с файлами!

 
MQL – глючная работа с файлами!
Не понимаю как MQL II работает с файлами. Мне нужно написать эксперт, который бы хранил несколько значений в файлах.

Глобальные переменные не подходят, потому что их сложно менять в ручную (приходится писать дополнительный эксперт), и кроме того, глобальные переменные не сохраняются при некорректном выходе из metatreder-а, других проблем с ними не было.

По идеи функция FileWrite должна полностью очищать файл и записывать туда новые значения, а она часто этого не делает, остаётся старое значение, а новое записывается на другой строке причём в искажённом виде например 1.1781 может записаться как 81. Ещё FileWrite не вставляет разделитель, если указано одно значение, приходится вставлять вручную. Как в качестве разделителя строки использовать “перенос строки”, пробовал “\n” не работает.
 
Вроде бы с файлами MQL работает нормально
FileWrite() как раз не должен переписывать файл, а должен добавлять новую строку, иначе как можно было бы, например, сохранить историю?
Разделитель задаётся функцией FileOpen() - второй параметр.
Если пишется одно значение, а разделитель всё-таки зачем-то нужен, тогда его можно добавить плюсом.

Вот мой эксперт, который записывает потиковую историю в файлы, разбитые по минутам - может быть, поможет.

/*[[
Name := ticks
Author := Copyright © 2003, Company
Link := http://www.company.com/
Lots := 1.00
Stop Loss := 0
Take Profit := 0
Trailing Stop := 0
]]*/

Vars: prevtime(0);
Array: fhand(-1),io(0);

If prevtime <> Time Then
{
If fhand > -1 then FileClose(fhand);
io = io + 1;
fhand = FileOpen("t"+Hour()+"_"+Minute()," ");
prevtime = Time;
};
FileWrite(fhand,Seconds(),(Bid+Ask)/2);
Exit;
 
Array, конечно, ни при чём :)
Можно было бы обойтись и Vars, но так уж получилось :)
 
FileWrite не очищает файл, а просто записывает строку (с переносом) в текущую позицию.
Если надо очищать файл перед записью, то можно делать так:

var h1(0);
h1 = FileOpen("filename", ";");
if FileSize(h1) then {
FileDelete("filename");
h1 = FileOpen("filename", ";");
};

И зачем использовать "\n" в качестве разделителя? Каждый вызов FileWrite переводит строку и так.
 
Теперь понятно
Спасибо всем! Теперь понятно. Я думаю работа с файлами в MQL не продумана. В php например есть две функции fwrite и fputs одна просто пишет а другая добавляет по указателю.
Причина обращения: