<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Как закрыть файл?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Как закрыть файл? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 03 May 2026 09:10:01 +0300</pubDate>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31075/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Есть гипотеза для объяснения проблем с &quot;битыми&quot; строчками: вы пишете в один физический файл, используя несколько разных дескрипторов на уровне lua.<br />
====code====
<pre>local f1 = io.open("filename.txt", "a+")
local f2 = io.open("filename.txt", "a+")
f1:write("Some text")
f2:write("Another text")
f1:close()
f2:close()
</pre>
============= <br />
			<i>17.05.2018 06:37:06, _sk_.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31075/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31075/topic3653/</guid>
			<pubDate>Thu, 17 May 2018 06:37:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31074/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_eeXOhNEI" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Вызываю я функцию так:<br /> <br />=============<br />При таком вызове рваться не должно... у вас какая-то серьёзная проблема с вводом/выводом. Возможно дело даже не в Lua, а в вашей виртуальной машине, настройках виртуального диска и пр.<br /><br />Попробуйте отключиться кэш совсем, через <noindex><a href="https://www.lua.org/manual/5.1/manual.html#pdf-file:setvbuf" target="_blank" rel="nofollow">file:setvbuf</a></noindex>:
====code====
<pre>function rec_big_data(file_path, value, paper)
&nbsp;&nbsp;&nbsp;&nbsp;rn = rn or {}
&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93; = rn&#91;paper&#93; or {}
&nbsp;&nbsp;&nbsp;&nbsp;if file_path~=rn&#91;paper&#93;.file_path then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if rn&#91;paper&#93;.handler then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.handler:close()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.handler = io.open(file_path, "a+")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if rn&#91;paper&#93;.handler then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.handler:setvbuf("no")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&#60;&#60;&#60;--- отключение кэша
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.file_path = file_path
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm("QL:open file error "..file_path)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;if rn&#91;paper&#93;.handler then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.handler:write(value.."&#92;n")
&nbsp;&nbsp;&nbsp;&nbsp;end
end</pre>
=============
а в другой день, наоборот, увеличьте его до 1 МиБ, заодно сравните скорость работы, и посмотрите, будут ли глюки и при каком режиме кэширования:
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.handler:setvbuf("full", 1024*1024)</pre>
============= <br />
			<i>17.05.2018 01:13:38, Suntor.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31074/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31074/topic3653/</guid>
			<pubDate>Thu, 17 May 2018 01:13:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31073/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Suntor,<br />эта проблема появилась только сейчас, когда я перестал делать flush на каждой записи. До этого я несколько недель подряд записывал каждый день без перерыва и такой проблемы не было. Она абсолютно новая.<br />Вызываю я функцию так:<br /><img src="http://dl3.joxi.net/drive/2018/05/16/0011/1313/742689/89/059cce788a.png" alt="Пользователь добавил изображение" border="0" /> <br />
			<i>17.05.2018 00:00:51, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31073/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31073/topic3653/</guid>
			<pubDate>Thu, 17 May 2018 00:00:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31072/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_LE4SgRIy" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Получаю данные колбеком OnParam. В него вставлена обсуждаемая функция.<br />=============<br />А внутри OnParam вы несколько раз getParamEx дёргаете для разных параметров? И потом их объединяете в таблицу или строку и кидаете дальше в вашу функцию записи?... если так, то сдаётся мне вы оба (вы и ваш коллега с соседней темы «<noindex><a href="https://forum.quik.ru/forum10/topic3648/" target="_blank" rel="nofollow">Некоторые глюки в 7.2</a></noindex>») встретились, собратья по несчастью... с одной и той же проблемой...<br /><br />Покажите, что вы делаете в OnParam, и как у вас идёт вызов вашей функции rec_big_data... <br />
			<i>16.05.2018 23:30:08, Suntor.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31072/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31072/topic3653/</guid>
			<pubDate>Wed, 16 May 2018 23:30:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31070/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			то есть мой метод не сработал. flush раз в 100 записей не помог. <br />
			<i>16.05.2018 20:46:45, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31070/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31070/topic3653/</guid>
			<pubDate>Wed, 16 May 2018 20:46:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31069/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вот ещё один случай. Что характерно, снова перед закрытием сессии. Почти в то же время.<br /><img src="http://dl3.joxi.net/drive/2018/05/16/0011/1313/742689/89/b3aff8068f.png" alt="Пользователь добавил изображение" border="0" /> <br />
			<i>16.05.2018 20:44:06, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31069/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31069/topic3653/</guid>
			<pubDate>Wed, 16 May 2018 20:44:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31068/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Получаю данные колбеком OnParam. В него вставлена обсуждаемая функция. <br />
			<i>16.05.2018 20:41:33, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31068/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31068/topic3653/</guid>
			<pubDate>Wed, 16 May 2018 20:41:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31050/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_Ysa53k7U" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Выключил flush.<br />Почему-то на всех сегодняшних файлах стал появляться одинаковый глюк: вот такое искажение:<br /><br />=============<br />А у вас получение данных и запись их в файл идут в одном потоке или в разных? Очень на «рассинхрон» похоже... <br />
			<i>16.05.2018 12:59:36, Suntor.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31050/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31050/topic3653/</guid>
			<pubDate>Wed, 16 May 2018 12:59:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31042/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Выключил flush.<br />Почему-то на всех сегодняшних файлах стал появляться одинаковый глюк: вот такое искажение:<br /><img src="http://dl4.joxi.net/drive/2018/05/15/0011/1313/742689/89/efbfd751db.png" alt="Пользователь добавил изображение" border="0" /><br />неадекватная (неполная строчка). Плюс пропуск нескольких секунд. До ошибки время 184444, после ошибки 184449. Может быть я в это время его включал-выключал, но я увы не помню этот момент. Днём на 1 из файлов было то же самое. Раньше, когда flush работал, такого не было. Видоизменил функцию. Добавил в неё flush 1 раз в 100 записей по данной бумаге:<br />	
====code====
<pre>count&#91;paper&#93;=(count&#91;paper&#93; or 0)+1
&nbsp;&nbsp;&nbsp;if count&#91;paper&#93;==100 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.handler:flush()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&#91;paper&#93;=0
&nbsp;&nbsp;&nbsp;end</pre>
============= <br />
			<i>15.05.2018 21:51:38, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31042/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31042/topic3653/</guid>
			<pubDate>Tue, 15 May 2018 21:51:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31015/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_rty2ESiC" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Спасибо, друзья. Проясняется, хотя мне очень тяжело с этим разбираться. Не то образование...<br />Вот текущая редакция функции, которая пишет слепки стакана. Триместр сменился, если путь поменялся. В этом случае закрываем старый файл, открываем новый.<br /> <br />=============<br />В таком виде, как правильно написал <noindex><a href="https://forum.quik.ru/user/47/" target="_blank" rel="nofollow">s_mike@rambler.ru</a></noindex>, flush перед самым close смысла особого не имеет. Поэтому можете стереть там строчку.<br />Мне вообще ваш подход не нравится. Вы пытаетесь запихать в одну функцию всю логику работы с файлами. Поэтому у вас в этой функции будет куча лишних проверок замедляющий её основную работу — запись. Но даже, в рамках вашего подхода, я бы всё переписал по-другому. Как-то вот так:<I><br /></I>
====code====
<pre>rn = rn or {}
rn&#91;paper&#93; = rn&#91;paper&#93; or {}
if file_path~=rn&#91;paper&#93;.file_path then
&nbsp;&nbsp;&nbsp;&nbsp;if rn&#91;paper&#93;.handler then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.handler:close()
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.handler:io.open(file_path, "a+")
&nbsp;&nbsp;&nbsp;&nbsp;if rn&#91;paper&#93;.handler then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.file_path = file_path
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm("QL:open file error "..file_path)
&nbsp;&nbsp;&nbsp;&nbsp;end
end
if rn&#91;paper&#93;.handler then
&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;paper&#93;.handler:write(value.."&#92;n")
end</pre>
=============
<I>— код не проверял, пишу из головы, чтобы передать суть.</I> <br />
			<i>15.05.2018 00:22:34, Suntor.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31015/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31015/topic3653/</guid>
			<pubDate>Tue, 15 May 2018 00:22:34 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31013/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Спасибо, друзья. Проясняется, хотя мне очень тяжело с этим разбираться. Не то образование...<br />Вот текущая редакция функции, которая пишет слепки стакана. Триместр сменился, если путь поменялся. В этом случае закрываем старый файл, открываем новый.<br /><img src="http://dl4.joxi.net/drive/2018/05/14/0011/1313/742689/89/c97c2d1eb8.png" alt="Пользователь добавил изображение" border="0" /> <br />
			<i>14.05.2018 23:01:50, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31013/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31013/topic3653/</guid>
			<pubDate>Mon, 14 May 2018 23:01:50 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31012/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_FX10Z4Ed" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br /> <noindex><a href="https://forum.quik.ru/user/901/" target="_blank" rel="nofollow">Suntor</a></noindex> <br />если я уберу flush при каждой записи, не появятся ли чрезмерные риски того, что какая-то часть данных не запишется?<br />Ну например я принудительно остановил скрипт. <br />Ведь в этом случае какие-то строчки потеряются? Или не потеряются?<br />=============<br />При останове скрипта луа машина, встроенная в терминал, автоматически закрывает все файлы посредством close(). Это происходит с версии qlua 6.xx вроде.<br /><br />Вызов close() всегда подразумевает flush() - так устроена библиотека С.<br /><br />Поэтому вы ничем не рискуете.<br /><br />flush() имеет смысл только в том случае, если вы в реальном времени другой программой читаете создаваемый файл. Flush() сбрасывает файловый буфер на диск немедленно. Без него файловые операции кешируются в памяти. В момент закртытия файла все буферы сбрасываются на диск. <br />
			<i>14.05.2018 22:49:10, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31012/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31012/topic3653/</guid>
			<pubDate>Mon, 14 May 2018 22:49:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31011/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/901/" target="_blank" rel="nofollow">Suntor</a></noindex><br />если я уберу flush при каждой записи, не появятся ли чрезмерные риски того, что какая-то часть данных не запишется?<br />Ну например я принудительно остановил скрипт. <br />Ведь в этом случае какие-то строчки потеряются? Или не потеряются? <br />
			<i>14.05.2018 22:21:35, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31011/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31011/topic3653/</guid>
			<pubDate>Mon, 14 May 2018 22:21:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message30995/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_eC8unfo5" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Я открыл файл с помощью io.open.<br />После этого я остановил скрипт. <br />Файл останется открытым, верно?<br /><br />=============<br />Нет. Закроется.<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_gI27keNG" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />И ещё один вопрос. Как мне принудительно закрыть файл, имея не дескриптор, а только путь file_path?<br />=============<br />Никак. Если речь идёт о дескрипторе файла в Lua, который имеет тип «userdata».<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_23IebqW3" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Как мне отлавливать средствами Луа, Windows или специальных программ открытые в данный момент луа-файлы?<br /> <br />=============<br />Можете использовать для этих целей Process Explorer (<noindex><a href="https://ru.wikipedia.org/wiki/Process_Explorer" target="_blank" rel="nofollow">https://ru.wikipedia.org/wiki/Process_Explorer</a></noindex>).<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_k4AfFYCJ" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />В Windows server 2003 эта функция не работает и не лечится. Я искал советы по данной проблеме, но они не сработали.<br /> <br />=============<br />Вы не то смотрите. Эта оснастка «Общие папки» показывает файлы открытые по сети (по протоколу SMB), и это никакого отношения к файловой системе и файлом открытым локально не имеет. Оснастка у вас не работает скорее всего, если мне не изменяет память, потому что не запущена одна из служб, на подобие «Files and Folder bla bla bla» или что-то вроде того... чтобы посмотреть системные ресурсы открытые конкретным процессом, в том числе и файлы, используйте Process Explorer.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_jXlLOs65" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Добавил в функцию переменную files_qty - это количество бумаг, которые пишутся. Если размер таблицы rn больше files_qty, значит сменился триместр и надо закрывать старые файлы. Очевиден недостаток: при смене триместра функция один раз закроет хороший файл - файл новенького триместра. Потом ей придётся его переоткрывать.<br />=============<br />1. Файл закрывайте там, где вы определяете смену «триместра», то-есть там, где у вас создаётся новая path. И там же открывайте сразу новый по новому имени. А внутри функции записи оставьте собственно только запись.<br />2. Уберите строчку «rn&#91;file_path&#93;:flush()», это тяжёлая операция, на которой у вас всё будет тормозить. Этот flush делайте только перед самым закрытием файла, то-есть перед close().<br />3. Зачем вам вторая таблица file_open где вы ставите true, она просто дублирует вашу основную таблицу rn с дескрипторами. Уберите её из кода, а открытие файла для конкретного file_path проверяйте условием «nil == rn&#91;file_path&#93;», а после закрытия файла обнуляйте этот же элемент через «rn&#91;file_path&#93; = nil».<br />4. Выражение «#rn&gt;files_qty» не сработает, потому что у вас таблица строится по строковым ключам, а оператор # работает только для индексированных по номерам таблиц, то-есть когда они используются как массивы.<br />5. Структура кода у вас неправильная, запись в файл нужно делать после проверки на nil возврата функции io.open. Вы эту проверку вообще не делаете после вызова io.open, а делает только при повторном вызове основной функции при следующей записи. У вас там нужно часть строк стереть, а часть местами поменять, чтобы привести код в порядок. <br />
			<i>14.05.2018 11:49:43, Suntor.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message30995/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message30995/topic3653/</guid>
			<pubDate>Mon, 14 May 2018 11:49:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message30985/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_nof9p0qE" href="/user/3010/" bx-tooltip-user-id="3010">Алексей</a> написал:<br />Таблица дескрипторов файлов (rn) у Вас - глобальная. Где-то вне функции rec_big_data Ваш скрипт, судя по всему, в нужный момент понимает, что нужно сменить номер триместра. Что Вам мешает в этот момент просто позакрывать все файлы, зная их дескрипторы из таблицы rn?<br />=============<br />Добавил в функцию переменную files_qty - это количество бумаг, которые пишутся. Если размер таблицы rn больше files_qty, значит сменился триместр и надо закрывать старые файлы. Очевиден недостаток: при смене триместра функция один раз закроет хороший файл - файл новенького триместра. Потом ей придётся его переоткрывать.<br /><img src="http://dl3.joxi.net/drive/2018/05/13/0011/1313/742689/89/3a93f05b87.png" alt="Пользователь добавил изображение" border="0" /><br />Спасибо за комментарии. Они очень помогают. <br />
			<i>13.05.2018 14:58:47, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message30985/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message30985/topic3653/</guid>
			<pubDate>Sun, 13 May 2018 14:58:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message30984/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Как мне отлавливать средствами Луа, Windows или специальных программ открытые в данный момент луа-файлы?<br />В Windows server 2003 эта функция не работает и не лечится. Я искал советы по данной проблеме, но они не сработали.<br /><img src="http://dl4.joxi.net/drive/2018/05/13/0011/1313/742689/89/7fa700a9f9.png" alt="Пользователь добавил изображение" border="0" /> <br />
			<i>13.05.2018 14:22:22, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message30984/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message30984/topic3653/</guid>
			<pubDate>Sun, 13 May 2018 14:22:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message30983/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Спасибо за ответы. <br />Разрешите задать ещё вопрос.<br />Я открыл файл с помощью io.open.<br />После этого я остановил скрипт. <br />Файл останется открытым, верно?<br />Если да, то следующий вопрос.<br />Я запустил скрипт и снова открыл этот же файл с помощью io.open. Теперь у меня два открытых файла?<br />---<br />И ещё один вопрос. Как мне принудительно закрыть файл, имея не дескриптор, а только путь file_path?<br />--<br /><br />Спасибо. <br />
			<i>13.05.2018 14:19:10, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message30983/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message30983/topic3653/</guid>
			<pubDate>Sun, 13 May 2018 14:19:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message30976/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_wnhcQIRE" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />После исполнения dofile эти файлы остаются открытыми? Надо ли заботиться о том чтобы их закрывать?<br />=============<br />Нет. Они закрываются внутри dofile, причём ещё до того, как запустится интерпретатор кода загруженного из этих файлов. <br />
			<i>12.05.2018 07:22:10, Suntor.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message30976/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message30976/topic3653/</guid>
			<pubDate>Sat, 12 May 2018 07:22:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message30975/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Спасибо. подумаю<br />И ещё вопрос. <br />Я открываю много файлов с помощью dofile<br />Файлы имеют вид<br /><img src="http://dl3.joxi.net/drive/2018/05/11/0011/1313/742689/89/59aae360e0.png" alt="Пользователь добавил изображение" border="0" /><br />Файлы &nbsp;огромных размеров.<br />После исполнения dofile эти файлы остаются открытыми? Надо ли заботиться о том чтобы их закрывать? <br />
			<i>12.05.2018 03:51:07, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message30975/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message30975/topic3653/</guid>
			<pubDate>Sat, 12 May 2018 03:51:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message30974/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Таблица дескрипторов файлов (rn) у Вас - глобальная. Где-то вне функции rec_big_data Ваш скрипт, судя по всему, в нужный момент понимает, что нужно сменить номер триместра. Что Вам мешает в этот момент просто позакрывать все файлы, зная их дескрипторы из таблицы rn? <br />
			<i>12.05.2018 01:03:54, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message30974/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message30974/topic3653/</guid>
			<pubDate>Sat, 12 May 2018 01:03:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как закрыть файл?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message30973/topic3653/">Как закрыть файл?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Господа, прошу подсказать.<br />Этой функцией я записываю текущую маркет дату<br />
====code====
<pre>function rec_big_data(file_path,value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if rn==nil then rn={} end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;if file_open==nil then file_open={} end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if file_open&#91;file_path&#93;==nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;file_path&#93;=io.open(file_path,"a+")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file_open&#91;file_path&#93;=true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm("QL:open file "..file_path)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;file_path&#93;:write(value.."&#92;n")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rn&#91;file_path&#93;:flush()
end&nbsp;&nbsp;&nbsp;</pre>
=============
file_path меняется три раза в день (в его название включён тикер, текущая дата и номер триместра: утренняя сессия 1, дневная сессия 2, вечерняя сессия 3).<br />вот пример historyGDM8 20180511-2.lua<br />В функции нет закрытия файла, потому что файл становится огромным, и скрипту тяжело его постоянно открывать-закрывать.<br />Робот пишет большое количество инструментов много дней подряд. Файлы остаются открытыми. Я замечаю, что виртуалка начинает тормозить. Думаю, что это из-за незакрытых файлов. <br />Подскажите пожалуйста как грамотно закрывать файл в конце триместра (при переходе на новый файл) с помощью close()?<br />Не могу сообразить, что в неё писать.<br />Спасибо. <br />
			<i>11.05.2018 19:41:46, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message30973/topic3653/</link>
			<guid>http://forum.quik.ru/messages/forum10/message30973/topic3653/</guid>
			<pubDate>Fri, 11 May 2018 19:41:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
