Запись в файл с новой строки - страница 6

 
Aleksei Stepanenko:
Там у Сергея работает несколько советников, строк несколько, поэтому массив. И поэтому всё выглядит некрасиво. Максим Кузнецов предлагал SQL, вот это правильно для общения этих советников между собой.

Но строки читаются по одной и как-то выбирается нужная стока. А потом уже массив не нужен будет.

Я тоже об этом говорил, но mql4 не поддерживает SQLite

 

А я вроде подключал библиотеку? Или не сюда, забыл уже.

 
Aleksei Stepanenko:

А я вроде подключал библиотеку? Или не сюда, забыл уже.

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

Например программа А открыла файл для редактирования, в это же самое время то же самое сделала программа В, далее программа А внесла изменения и сохранила их с помощью FileClose, следом то же самое сделала программа В, но при открытии файла программой С в файле не будет изменений произведённых программой А, а только те изменения, которые были осуществлены и записаны программой В, так как программа В произвела более позднее сохранение, нежели программа А.

Но это не точно.

Существует вообще какая-нибудь информация на этот счёт?

 
Одновременная работа программ с одним файлом это зло злейшее. В момент работы с файлом советник должен контролировать запрет чтения/записи этого файла другими советниками. Используйте SQL или флаг-глобальную переменную или флаг-файл. Иначе будут непонятные ошибки, которые трудно обнаружить.
 
Aleksei Stepanenko:
Одновременная работа программ с одним файлом это зло злейшее. В момент работы с файлом советник должен контролировать запрет чтения/записи этого файла другими советниками. Используйте SQL или флаг-глобальную переменную или флаг-файл. Иначе будут непонятные ошибки, которые трудно обнаружить.

Не такое уж это и зло, задачи разные бывают, просто необходимо учитывать определённые особенности.

По всей видимости сохранение изменений происходит именно в момент FileClose, а до тех пор о них никто не подозревает.

 
Вам решать. Мозг человека так устроен, что новые идеи в нём приживаются с трудом.
 
EfremovSergey:

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

Например программа А открыла файл для редактирования, в это же самое время то же самое сделала программа В, далее программа А внесла изменения и сохранила их с помощью FileClose, следом то же самое сделала программа В, но при открытии файла программой С в файле не будет изменений произведённых программой А, а только те изменения, которые были осуществлены и записаны программой В, так как программа В произвела более позднее сохранение, нежели программа А.

Но это не точно.

Существует вообще какая-нибудь информация на этот счёт?

Сложно это настроить, но не невозможно. Достаточно проверять, перед записью время последнего изменения с аналогичным временем при открытии. То-есть читаем FILE_MODIFY_DATE затем открываем файл, делаем изменения, опять читаем FILE_MODIFY_DATE сравниваем с предыдущим и если изменений никто не делал закрываем файл сохраняя свои изменения. Иначе отменяем изменения… и повторяем открытие. Примерно так.

 
EfremovSergey:

Не такое уж это и зло, задачи разные бывают, просто но необходимо учитывать определённые особенности.

По всей видимости сохранение изменений происходит именно в момент FileClose, а до тех пор о них никто не подозревает.

Не факт.

FileFlush

Сброс на диск всех данных, оставшихся в файловом буфере ввода-вывода.

void  FileFlush( 
   int  file_handle      // handle файла 
   );
 
Alexey Viktorov:

Сложно это настроить, но не невозможно. Достаточно проверять, перед записью время последнего изменения с аналогичным временем при открытии. То-есть читаем FILE_MODIFY_DATE затем открываем файл, делаем изменения, опять читаем FILE_MODIFY_DATE сравниваем с предыдущим и если изменений никто не делал закрываем файл сохраняя свои изменения. Иначе отменяем изменения… и повторяем открытие. Примерно так.

Это примерно то же самое, что и флаг "занято" (кто первый встал - того и тапки), только в разы сложнее, но мысль интересная, мне понравилась, спасибо.

 
Alexey Viktorov:

Не факт.

FileFlush

Сброс на диск всех данных, оставшихся в файловом буфере ввода-вывода.

Не особо понял что это означает в контексте сохранения при FileClose.

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