| Автор |
Сообщение |
|
|
Вопрос решён.
|
 |
|
|
|
Есть функция MoveUp, выполняющаяся в вышестоящей программе. Как аргумент туда входит sFileName - строковое значение с именем файла, над которым нужно провести действие (только имя, без пути). Как передать в эту функцию имя файла, из которого она вызывается? Сейчас делаю это напрямую, тупо прописав имя ручками. Очень не хочется, чтобы скрипт становился неработоспособным при смене имени файла.
|
 |
|
|
smz wrote:
1. К сожалению, приведенный тобой кусок исковерканной таблицы не производит впечатления скопированного, а скорее записанного по памяти. Пожалуйста, скопируй кусок повреждённой таблицы, тогда можно будет говорить конкретнее.
|
 |
|
|
smz wrote:Ну, похоже, "r+" и есть это слабое место. Используй "a".
Опыт показал, что пробоина в самой функции. Смена режима на "а" или "а+" даёт тот же результат. При каком-то условии таблица коверкается.
|
 |
|
|
|
Попробую. Вот только так и не понял, в чём кривизна... Ведь в подавляющем большинстве случаев функция работает нормально.
|
 |
|
|
Можно ли как-то оптимизировать такую конструкцию для сохранения многоуровневых таблиц?
Проблема в том, что при некоторых условиях (хоть убейте, так и не смог выяснить при каких конкретно) таблица сохраняется в искажённом виде:
В случае, если в функции WriteTable я использую w вместо r+, то никаких искажений не происходит. Но суть в том, что мне необходимо сохранять в этом же файле и другие данные, в таблицу не входящие.
Если в коде есть "слабое" место, укажите мне на него пожалуйста.
|
 |
|
|
z00n wrote:Я не знаю, попробуйте локализовать проблему или дайте компилирующися кусок кода с проблемой.
Да уже не актуально, т.к. после явного объявления открытия файла, он прекрасно удаляется.
|
 |
|
|
z00n wrote:Дело в том, что файл уже открыт, раз вы не можете его удалить. Найдите где в вашей программе вы открываете файл и не закрываете его. Если вам нужно держать файлы открытыми - заведите глобальную lookup-table :: {filename->filehandle} c weak value. Это позволит закрывать файл по имени перед удалением.
Проблема в том, что исходя из кода программы, он должен быть закрыт. В функции сохранения сообщения файл закрывается. При входе пользователю выдаются сообщения из файла, но и там файл закрывается. Если я просто пытался закрыть файл, отладчик выдаёт, что не может найти открытый файл (естественно, я пытаюсь закрыть именно тот файл, который открывал через другие функции).
|
 |
|
|
z00n wrote:
Мне кажется проблема в том, что вы не закрываете файл перед тем как пытаетесь его удалить.
Попробуйте так:
Сработало. Только для начала файл открыть нужно было
|
 |
|
|
Не пойму, в чём суть проблемы. Есть вот такой кусок кода с обработкой команды:
При сработке команды должен удаляться файл с сообщениями из определённой папки, имеющий название, совпадающее с ником того, кто активизировал команду.
Проблема в том, что если файл с сообщениями был создан в ту же сессию, что и активирована команда его удаления, я получаю сообщение об очистке (т.е. формально os.execute("del "..OffLineDir..user.sName..".msg") выполняется), но файл в папке остаётся. Как я понимаю, он удаляется и создаётся заново. Если же между сохранением файла и активацией команды была перезагрузка хоста, то файл удаляется прекрасно.
Вот функция сохранения в файл:
Здесь user - таблица с данными пользователя, сохраняющего сообщение, aim - адресат, msg - сообщение.
Каким образом мне можно очистить почту, не перезапуская хост?
|
 |
|
|
|
Спасибо, попробую.
|
 |
|
|
Суть вопроса следующая:
Есть некая таблица Table={1,0,0,1,function() Time() end}
Первые 4 элемента - разные опции, 5-ый - функция, которую нужно выполнить при некотором условии.
OnTimer() - это функция, реализующая таймер как таковой. При срабатывании необходимо проверить некое условие, и в случае выполнения запустить функцию Table[5]. Если эта функция возвращает true, то выдаётся определённый результат.
Интересует именно тот кусок кода, где я функцию обозначил как <Table[5]>. Не знаю, как описать инициализацию функции из таблицы и как правильно проверить, что она возвращает true. Перепробовал несколько вариантов. Ни при одном из них ошибок синтаксиса не получаю, но функция просто не работает.
Почему функцию нужно запихнуть именно в таблицу. Эта таблица - элемент внешней, которая собирает в себе описания нескольких таймеров. В других просто реализован счётчик, и они прекрасно работают. Здесь же по таймеру нужно выполнить функцию и результата никакого.
|
 |
|
|
|
Вроде... Хотя мой комп не показатель. Связь с Москвой последнюю неделю не ахти. Скорость прыгает от 20 до 800 КБ/с. Соответственно вчера мыло грузилось с полминуты, сегодня вылетело за пару секунд.
|
 |
|
|
|
Вопрос, а нужны ли этому форумы разные навороты? Должны чётко работать основные модули, включая поиск. Всё остальное, ИМХО, лишне.
|
 |
|
|
Есть вот такой маленький скриптик:
Действует очень просто. По запросу обращается к библиотеке WSA. В зависимости от команды возвращает host по IP или пытается соединиться с определённым портом удалённого адреса.
Сам скрипт работает нормально. Но вот в чём загвоздка. Если соответствующий адрес не найден или IP не разрешается до host, происходит задержка отклика примерно на 5-10 секунд. Как понимаю, это связано с тем, что библиотека инициирует соединение в неком временном промежутке и выдаёт ошибку только по его окончании.
Вопрос, можно ли не меняя содержания библиотеки, снизить время отклика? Если да, то как?
|
 |
|
|
|
|