Как удалить или исправить файл после ошибки 5004 ? - страница 4

 
Aleksander Gladkov #:

Казалось, уже все сделано правильно, но нет!

Вот:

Это на домашнем компьютере в России.

Когда я удалил утилиту Get_news5 с графика, а затем снова присоединил, она переписала этот нулевой файл и снова заработала правильно.

Значит дело в ней?

Но она только и делает что открывает, пишет и закрывает, а когда не может открыть ситуация подвисает.

Любопытно, что эти же программы на VPS в это же время не дали никаких ошибок, файл пишется и читается.

у меня всего лишь одно подозрение

Вы производите запись на каждом тике и жесткий диск у Вас физический, это весьма критично и пагубно может повлиять на целостность и работу жесткого диска

и вполне может стать причиной рандомного по времени появления Вашей ошибки

попробуйте работать с файлом в оперативной памяти

например, я использовал запись в файл по миллисекундому таймеру, что превосходит ежетиковоее количество обращений к файлу и ни разу не словил ошибку

Как передать собранные и обработанные данные фреймов из эксперта? - Общее обсуждение - Форум алго-трейдеров MQL5 - Страница 4
 

Здравствуйте, спасибо всем кто помогал решить проблему с записью и чтением файла разными программами!

Сегодня, наверное, можно подвести итог. Программы отработали почти сутки без появления ошибок.

Мой случай: одна программа пишет файл, многие программы его читают.

Рабочий вариант кода:

Для записи файла:

int handle=FileOpen(file_cpy,FILE_WRITE | FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_TXT);

Для чтения файла:

int FileHandle=FileOpen(file_cpy,FILE_READ | FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_BIN);

Некоторые обратили внимание, что у меня файл пишется как FILE_TXT , а читается как FILE_BIN.

Это работает и обусловлено моим алгоритмом интерпретации данных и никак не связано с рассматриваемой проблемой.

Возможно кому-то будет интересно, что так тоже можно.

 
Renat Akhtyamov #:

у меня всего лишь одно подозрение

Вы производите запись на каждом тике и жесткий диск у Вас физический, это весьма критично и пагубно может повлиять на целостность и работу жесткого диска

и вполне может стать причиной рандомного по времени появления Вашей ошибки

попробуйте работать с файлом в оперативной памяти

например, я использовал запись в файл по миллисекундому таймеру, что превосходит ежетиковоее количество обращений к файлу и ни разу не словил ошибку

Как передать собранные и обработанные данные фреймов из эксперта? - Общее обсуждение - Форум алго-трейдеров MQL5 - Страница 4

Вот возможность работы в памяти к которой я, возможно, обращусь позже:

DATABASE_OPEN_MEMORY

Создать базу данных в оперативной памяти

   string filename="Memory";
//--- открываем/создаем базу данных в общей папке терминалов
   int db=DatabaseOpen(":memory:", DATABASE_OPEN_MEMORY | DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE | DATABASE_OPEN_COMMON);
   if(db==INVALID_HANDLE)
     {
      Print("DB: ", filename, " open failed with code ", GetLastError());
      return;
     }
 

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