Запись в файл с одновременным чтением из другой программы?

Страницы: 1
RSS
Запись в файл с одновременным чтением из другой программы?
 
Добрый день,
Код
   export_file = io.open(robot_path .. "test" .. ".txt","a");
   if export_file == nil then
      export_file = io.open(robot_path .. "test" .. ".txt","w");
   end;

   export_file:write(str1.."\n");


Открываю файл в блокноте и запись прекращается. Как открыть файл на запись чтобы можно было читать?
 
qt,
Попробуйте открыть в FAR через F3.
 
Спасибо, но интересно как на стороне луа писать в файл чтобы можно было читать другой программой.
 
Цитата
qt написал:
Открываю файл в блокноте и запись прекращается. Как открыть файл на запись чтобы можно было читать?
Вроде Блокнот (Notepad.exe) не читает изменения файла после открытия. Он единожды вычитывает файл в память, и всё. Можно во втором Блокноте открыть тот же самый файл, изменить и сохранить, и в первом Блокноте он не изменится, и сам Блокнот даже не предупредит, что файл был изменён извне. Поэтому, возможно у вас запись со стороны Lua идёт, но вы её просто в Блокноте не видите.

Попробуйте Notepad++ для сравнения, он по крайней мере сразу скажет, если файл извне был изменён, и предложит перезагрузить его. Можно опцию ещё поставить:
Settings -> Preferences... -> MISC. -> Update silently
тогда он должен сам автоматом перечитывать, по идее должно работать, но я не проверял...
 
Спасибо, похоже Вы правы - со временем обновляется но порциями, включил flush обновляет сразу.
 
Еще вопрос.

Предположим файл открыт через OnInit, пишем туда одновременно из main (например по таймеру) и из OnQuote/OnParam по обновлению.
Будет ошибка или по очереди запишут?
 
Цитата
qt написал:
Будет ошибка или по очереди запишут?
Будет.
 
Цитата
Suntor написал:
Будет.
Спасибо, понял
 
Добрый день, подскажите, пожалуйста,

В текстовый файл (открыт в OnInit с "r+") из только одной функции записываются котировки. Везде, где можно и нужно стоит file:flush().

Обычно в файл все записывалось по мере накопления данных. Но пару дней назад (может из-за обновления Windows?) в файл записываются только заголовки данных (это делается еще в OnInit) и потом ничего не пишется, пока не откроешь на просмотр в FAR. Подгружает сразу, все данные при просмотре имеются.

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

Что тут можно сделать?

Может добавить в функцию чтение строчки из файла, чтобы записывала перед чтением и не копило? Как-то не правильно так )))
 
PF,

Здравствуйте,
Уточните версию терминала,
Приложите код описывающий запись в файл
 
Цитата
qt написал:
Открываю файл в блокноте и запись прекращается. Как открыть файл на запись чтобы можно было читать?
Добрый день. Я пишу в файл так. При этом запись продолжается, если открыть файл сторонними программами, типа блокнота.
Код
function save_log(st)
   local path=getScriptPath().."\\"..options.script_name..".log"
   local fn=io.open(path, "a") -- a-дозапись, w-перезапись, r-чтение
   fn:write(st.."\n")
   fn:close()
end
 
Цитата
Sergey Gorokhov написал:
PF,

Здравствуйте,
Уточните версию терминала,
Приложите код описывающий запись в файл
Версия терминала 8.3.2.4
Код в нескольких местах в одной функции, везде примерно один и тот же:
Код
  -- Формируем и записываем в файл строку с указанием интервала и соответсвующей ему цены
      QuoteStr = string.format("%s;%0.6f;%i", MySecurityList[j], TimeShtamp, MyVolumeInt);
      for i = (- MaxNumOfInterval), MaxNumOfInterval, 1 do
         -- так пишем с номером интервала
         --QuoteStr = string.format("%s [%i]= %s;", QuoteStr, i, PriceInInt[i]);      
         -- Ставим Nan, потому что потом так удобней обрабатывать в pandas
         if PriceInInt[i] == nil then PriceInInt[i] = "NaN" end;

         QuoteStr = string.format("%s;%s", QuoteStr, tostring(PriceInInt[i]));
      end;
      QuoteStr = string.format("%s\n", QuoteStr);
      MyVolIntFile[j]:write(QuoteStr);
      MyVolIntFile[j]:flush();
 
PF,
Присланной части кода не достаточно для понимания.
Пришлите нам полный код на quiksupport@arqatech.com
 
Цитата
Sergey Gorokhov написал:
PF,
Присланной части кода не достаточно для понимания.
Пришлите нам полный код на quiksupport@arqatech.com
Отправил, спасибо.
Страницы: 1
Читают тему (гостей: 1)
Наверх