вопрос по записи в файл

 
При записи в файл остается последняя запись.Предыдущие удаляются.
По описанию MQL4 онструкция FILE_READ|FILE_WRITE должна добавлять новую запись к старым.
Не получается. Подскажите где ошибка.

abc_1=Year();
abc_2=Month();
abc_3=Day();
abc_4=Hour();
abc_5=AccountEquity();

if(Minute()==00 && Hour()==12)
{
Print("Account equity = ",AccountEquity());
handle=FileOpen("my_equity.csv",FILE_CSV|,';');

if(handle>0)
{
FileWrite(handle, abc_1, abc_2, abc_3, abc_4, abc_5);
FileClose(handle);
}
}
С уважением, Анатолий 
 
<<if(handle>0)
{
FileWrite(handle, abc_1, abc_2, abc_3, abc_4, abc_5);
FileClose(handle);
}>>

файл закрывается сразу же, при повторном его открытии указатель устанавливается в начало, т.е. файл полностью переписывается с начала.

if(handle>0)
{
FileWrite(handle, abc_1, abc_2, abc_3, abc_4, abc_5);

}
....
FileClose(handle);

запишем все, что нужно, потом в конце работы закроем файл.
 
anatoli:

FILE_CSV|
Палка лишняя, хотя, она врядли на что то влияет
 
anatoli:

При записи в файл остается последняя запись.Предыдущие удаляются.
По описанию MQL4 онструкция FILE_READ|FILE_WRITE должна добавлять новую запись к старым.
Не получается. Подскажите где ошибка.

abc_1=Year();
abc_2=Month();
abc_3=Day();
abc_4=Hour();
abc_5=AccountEquity();

if(Minute()==00 && Hour()==12)
{
Print("Account equity = ",AccountEquity());
handle=FileOpen("my_equity.csv",FILE_CSV|,';');

if(handle>0)
{
FileWrite(handle, abc_1, abc_2, abc_3, abc_4, abc_5);
FileClose(handle);
}
}
С уважением, Анатолий
Указатель надо установить в конец файла
 
Integer писал (а):
Указатель надо установить в конец файла
FileSeek(handle, 0, SEEK_END);
 

Спасибо всем! С File Seek() попробую.
Пока выкрутился так.............

int firstTime_1=1;

int handle;

int start()

{

................................................................................ .........................................

................................................................................ .........................................

if (firstTime_1==1)

{

handle=FileOpen("my_equity.csv",FILE_CSV|FILE_READ|FILE_WRITE,';');

if(handle<1)

{Print("File (my_equity) not found, the last error is ", GetLastError()); return(false);}

firstTime_1=-1;

}

if(Minute()==00 && Hour()==12)

{

Print("Account equity = ",AccountEquity());

abc_1=Year();

abc_2=Month();

abc_3=Day();

abc_4=Hour();

abc_5=AccountEquity();

if(handle>0)

{

FileWrite(handle,abc_1,abc_2,abc_3,abc_4,abc_5);

// FileClose(handle);

}

}

................................................................................ .............................

................................................................................ .............................

return(0);

}

Вроде работает.

..................................................
.................................................

2004;9;7;12;10234.8542

2004;9;8;12;10234.8542

2004;9;9;12;10251.3542

2004;9;10;12;10350.0942

2004;9;13;12;10350.0942

2004;9;14;12;10350.0942

2004;9;15;12;10350.0942

2004;9;16;12;10165.443

2004;9;17;12;10482.4126

2004;9;20;12;10614.0626

.............................................
............................................

Если не описывть handle как глобальную переменную писать в файл не будет (пустой). Без глобальной firstTime_1 то же ерунда разная получается.
С File Close() так и не разобрался. Куда ни приткнешь все равно только последняя строка в записи. Снес FileClose. Вроде и без него работает. Только файл занят все время до окончания тестирования. Хотелось по другому. Открывать файл, писать в него, закрыть, снова открыть, дописать и т. д.
Конструкция FILE_CSV|FILE_READ|FILE_WRITE по описанию языка должна это позволять.

int FileOpen(

string filename, int mode, int delimiter=';')

Открывает Файл для ввода и/или вывода. Возвращает файловый описатель открытого файла или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().
Замечания: файлы могут открываться только в папке каталог_терминала\experts\files (каталог_терминала\tester\files в случае тестирования эксперта) или ее подпапках.
Нельзя одновременно использовать режимы FILE_BIN и FILE_CSV.
Если FILE_WRITE не комбинируется с FILE_READ, то будет открыт файл нулевой длины. Даже если до открытия в файле были данные, то они будут уничтожены. Если необходимо дописывать данные в существующий файл, то его нужно открывать, используя комбинацию FILE_READ | FILE_WRITE.
Если FILE_READ не комбинируется с FILE_WRITE, то файл будет открыт только в том случае, если он уже существует. Если файл не существует, то создать его можно, используя режим FILE_WRITE.
Если возможно, то хотелось бы небольшой фрагмент кода на эту тему посмотреть.
Заранее благодарен.
С уважением Анатолий.

 
KimIV писал (а):
Integer писал (а):
Указатель надо установить в конец файла
FileSeek(handle, 0, SEEK_END);


Спасибо KimIV!
Все рулит. Нормально!

int start()

{

int handle;

if(Minute()==00 && Hour()==12)

{

Print("Account equity = ",AccountEquity());

abc_1=Year();

abc_2=Month();

abc_3=Day();

abc_4=Hour();

abc_5=AccountEquity();

handle=FileOpen("my_equity.csv",FILE_CSV|FILE_READ|FILE_WRITE,';');

if(handle<1)

{Print("File (my_equity) not found, the last error is ", GetLastError()); return(false);}

if(handle>0)

{

FileSeek(handle, 0, SEEK_END);

FileWrite(handle,abc_1,abc_2,abc_3,abc_4,abc_5);

FileClose(handle);

handle=0;

}

}


С уважением, Анатолий.