Не работает FILE_SHARE_READ

 
Запускаю советник:

int OnInit()
{

FileOpen("Log.txt",FILE_TXT|FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE);

return(INIT_SUCCEEDED);

Потом запускаю скрипт:

void OnStart()
{

int Handle=FileOpen("Log.txt",FILE_TXT|FILE_READ|FILE_SHARE_READ);
Alert(Handle);
   
}

Скрипт отдает -1.

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

 
igrok333:
Запускаю советник:

Потом запускаю скрипт:

Скрипт отдает -1.

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

Распечатайте код ошибки рядом с хендлом. 

 

Делайте так:

void OnStart()
{

int Handle=FileOpen("Log.txt",FILE_TXT|FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE);
Alert(Handle);
   
}
 
Ihor Herasko #:

Распечатайте код ошибки рядом с хендлом. 

5004
 
Для информации об обмене. Когда один пишет, нужно выкинуть флаг, чтобы второй пока не читал. Потом закрыть, убрать флаг, пусть читает.
 
Aleksei Stepanenko #:

Делайте так:

а почему так? даже если скриптом я не пишу, только читаю?

 
Aleksei Stepanenko #:

Делайте так:

так работает, спасибо.

 
Не знаю, фишка такая
 
Aleksei Stepanenko #:
нужно выкинуть флаг

какой флаг?

 
Ну, файл дополнительный, или переменная глобальная в терминале. Если он/она есть, то не читаем. Потому что, можно прочитать в момент записи, и информация будет неверна.
 
Aleksei Stepanenko #:
Ну, файл дополнительный, или переменная глобальная в терминале. Если он/она есть, то не читаем. Потому что, можно прочитать в момент записи, и информация будет неверна.

а, ясно.

Причина обращения: