<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=151&amp;type=atom" />
	<updated>2015-11-19T15:48:06Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=151</id>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1785#p1785" />
			<content type="html"><![CDATA[<p>Ну, я ж там написал, что существует ненулевая вероятность проблем чтения/<strong>записи</strong> из/в файл(а).<br />Именно, не открытия, а дальнейшей работы после &quot;удачного&quot; открытия.</p><p>Да и вообще монопольный режим не помешал бы. <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></content>
			<author>
				<name><![CDATA[CyberTrader]]></name>
				<uri>https://quik2dde.ru/profile.php?id=248</uri>
			</author>
			<updated>2015-11-19T15:48:06Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1785#p1785</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1784#p1784" />
			<content type="html"><![CDATA[<p><strong>CyberTrader</strong>, я как-о не могу понять как связаны ваши два сообщения: одно про монопольный доступ на запись, другое - про проблемы с открытием файла на чтение...</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2015-11-19T14:54:46Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1784#p1784</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1783#p1783" />
			<content type="html"><![CDATA[<p>В общем, ничё умнее я не придумал, кроме как поместить функции чтения/записи в отдельную функцию и вызывать её в защищённом режиме:<br /></p><div class="codebox"><pre><code>function ReadLine(file)
  return file:read()
end
function ReadFile(file)
  for line in file:lines() do
    -- Тут обрабатываем строку
  end
end
local file, err = io.open(FileName)
if file then  -- открыть-то мы открыли файл, но не факт, что нам дадут в дальнейшем его прочитать
              -- то же и с записью
  pcall(ReadLine, file)
  pcall(ReadFile, file)
end</code></pre></div><p>поскольку удачное открытие файла ещё [url=https://quik2dde.ru/viewtopic.php?pid=1295#p1295]не говорит[/url] об удачной дальнейшей работе с этим файлом.</p>]]></content>
			<author>
				<name><![CDATA[CyberTrader]]></name>
				<uri>https://quik2dde.ru/profile.php?id=248</uri>
			</author>
			<updated>2015-11-19T12:35:25Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1783#p1783</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1782#p1782" />
			<content type="html"><![CDATA[<p>Мануалы почитал, эксперименты попроводил - а вот нет такой возможности, однако.<br />Файл безусловно открывается в shared mode на запись, средств изменить это - нет в Lua.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2015-11-19T10:20:17Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1782#p1782</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1781#p1781" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>sam063rus пишет:</cite><blockquote><p>не буду тут особо умничать/влезать - но просто, думаю надо задаться вопросом: а с какими атрибутами открывался файл? share deny etc.</p></blockquote></div><p>Есть ли в Lua возможность открыть файл на запись в монопольном режиме? Т.е., чтобы другие приложения могли из него только читать.</p>]]></content>
			<author>
				<name><![CDATA[CyberTrader]]></name>
				<uri>https://quik2dde.ru/profile.php?id=248</uri>
			</author>
			<updated>2015-11-18T11:31:14Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1781#p1781</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1625#p1625" />
			<content type="html"><![CDATA[<p>Разобрался. Просто я думал что notepad++ спрашивает, обновить ли в нём файл, каждый раз когда он изменяется, а оказывается нотпад проверяет, обновился ли файл, после того как файл закроется.</p>]]></content>
			<author>
				<name><![CDATA[ascerdfg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=246</uri>
			</author>
			<updated>2015-09-07T09:31:44Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1625#p1625</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1623#p1623" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ascerdfg пишет:</cite><blockquote><p>Единственное что Квик перестал ругаться при его закрытии.</p></blockquote></div><p>Судя по вашему [url=https://quik2dde.ru/viewtopic.php?pid=1412#p1412]сообщению в соседней теме[/url], Квик ругается не на закрытие файла, а на попытку записи в файл после его закрытия, о чём вас честно [url=https://quik2dde.ru/viewtopic.php?pid=1413#p1413]предупредили[/url] (Квик, кстати сообщает номер строки, в которой произошла ошибка - посмотрите).<br />Само же закрытие файла в том примере проходит успешно, поэтому и не видно разницы, что с file:flush(), что без него.</p>]]></content>
			<author>
				<name><![CDATA[CyberTrader]]></name>
				<uri>https://quik2dde.ru/profile.php?id=248</uri>
			</author>
			<updated>2015-09-05T06:42:49Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1623#p1623</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1622#p1622" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ascerdfg пишет:</cite><blockquote><p>Единственное что Квик перестал ругаться при его закрытии.</p></blockquote></div><p>Какая-то ошибка в скрипте мне видится, как таковое применение flush не может влиять на закрытие.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2015-09-04T12:42:36Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1622#p1622</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1620#p1620" />
			<content type="html"><![CDATA[<p>.</p>]]></content>
			<author>
				<name><![CDATA[ascerdfg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=246</uri>
			</author>
			<updated>2015-09-03T13:24:18Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1620#p1620</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1619#p1619" />
			<content type="html"><![CDATA[<p>.</p>]]></content>
			<author>
				<name><![CDATA[ascerdfg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=246</uri>
			</author>
			<updated>2015-09-03T13:17:38Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1619#p1619</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1610#p1610" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ascerdfg пишет:</cite><blockquote><p>Подскажите плиз. Как объявлять файл для лога с именем, содержащем текущую дату?</p></blockquote></div><p>Сократите путь до вашего файла:<br /></p><div class="codebox"><pre><code>local path=getScriptPath()--&quot;C:\\00LUA&quot; - папка со скриптами
local file_name=path..&quot;\\&quot;..getInfoParam (&quot;TRADEDATE&quot;)..&quot;_logo.txt&quot;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2015-08-19T05:20:09Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1610#p1610</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1609#p1609" />
			<content type="html"><![CDATA[<p>Подскажите плиз. Как объявлять файл для лога с именем, содержащем текущую дату? Можно на этом примере:</p><div class="codebox"><pre><code>file=io.open(&quot;D:\\Program Files\\Lua\\1\\logo.txt&quot;, &quot;w&quot;) </code></pre></div>]]></content>
			<author>
				<name><![CDATA[ascerdfg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=246</uri>
			</author>
			<updated>2015-08-19T03:38:19Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1609#p1609</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1298#p1298" />
			<content type="html"><![CDATA[<p>-</p>]]></content>
			<author>
				<name><![CDATA[sam063rus]]></name>
				<uri>https://quik2dde.ru/profile.php?id=228</uri>
			</author>
			<updated>2015-04-30T13:28:49Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1298#p1298</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1295#p1295" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>1) Завершение скрипта (аварийное, т.е. остановка по ошибке) - это не завершение процесса QUIK с точки зрения ОС, поэтому в этом случае файл, возможно, останется залоченным до перезапуска QUIK.</p></blockquote></div><p>Файл можно освободить повторным запуском скрипта с корректным закрытием сего файла.</p><div class="quotebox"><cite>swerg пишет:</cite><blockquote><p><strong>CyberTrader</strong>,<br />в вашем скрипте используется другой подход относительно того, который я описал. Вы постоянно открываете и закрываете файл лога, что неправильно, т.к. эти операции очень затратны.<br />Файл лога надо открыть один раз в начале скрипта и закрыть по завершении. Тогда, после того, как мы успешно открыли файл на запись, никакая программа уже не сможет нам помешать в него писать</p></blockquote></div><p>Сейчас проверил: если файл открыт на запись <strong>до блокировки</strong> Квиком, то, да, при успешном закрытии файла, данные в нём сохраняются.<br />Если же файл открыт, будучи <strong>уже заблокированным</strong> Квиком, те данные, что сбрасывались на диск в момент блокировки будут потеряны. При этом открытие функцией io.open() проходит без ошибок.</p><p>Но мой скрипт наглядно показывает то, что файл при блокировании другим приложением может быть открыт без ошибок (причём, несколько раз!), при этом запись в него может быть невозможна.<br />Поэтому отсутствие ошибки &quot;Permission denied&quot; при открытии файла не гарантирует впоследствии успешной записи в него.</p>]]></content>
			<author>
				<name><![CDATA[CyberTrader]]></name>
				<uri>https://quik2dde.ru/profile.php?id=248</uri>
			</author>
			<updated>2015-04-30T11:37:11Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1295#p1295</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись логов в файл из Lua-скриптов, PrintDbgStr для логирования]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=1294#p1294" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Для оси файл так и останется &quot;открытым для записи&quot; для некоего уже несуществующего клиента, или ось разруливает ситуацию в исходное состояние?</p></blockquote></div><p>Конечно разруливает. По завершении процесса в ОС все связанные с ним ресурсы освобождаются, в том числе и закрываются открытые файлы, сетевые подключения и т.д. Иначе файловая система гарантированно умирала бы за 1..2 дня работы )</p><div class="quotebox"><blockquote><p>А что будет в случае аварийного вылета скрипта или терминала?</p></blockquote></div><p>Тут есть момент:<br />1) Завершение скрипта (аварийное, т.е. остановка по ошибке) - это не завершение процесса QUIK с точки зрения ОС, поэтому в этом случае файл, возможно, останется залоченным до перезапуска QUIK.<br />2) Падение терминала - это завершение процесса с точи зрения ОС, поэтому файл будет разлочен.</p><p>Но если в результате аварийного завершения скрипта или терминала мы не выполнили file:close(), то, возможно, будет потеряна финальная часть лога, начиная с последнего вызова file:flush() (если вы сообще его вызываем). Это как бы аргумент в пользу использования file:flush() после каждой записи в файл, но тут, как водится, снова подвох: вызов file:flush() замедляет работу скрипта, т.к. производится сброс закэшированных ОС данных на винчестер, а устройство это - самое медленное в компьютере. Нас, конечно, несколько спасает аппаратный кэш внутри самого винчестера.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2015-04-30T10:27:22Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=1294#p1294</id>
		</entry>
</feed>
