| Автор |
Сообщение |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 21/05/2008 11:09:15
|
__Alexey__
Новичок
Зарегистрирован: 19/05/2008 18:23:35
Сообщений: 9
Оффлайн
|
mozers поставил вопрос так, что использовать CopyFile нельзя.
Полагаю, ему нужна совместимость без лишних проблем для разных платформ (WIN & GTK & ...) для SciTE.
Для большей схожестью с CopyFile можно добавить проверку на перезапись существующего файла.
К сожалению, решение получилось не элегантное.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 21/05/2008 21:03:29
|
z00n
Постоянный посетитель
Зарегистрирован: 15/02/2008 12:15:56
Сообщений: 92
Оффлайн
|
Практически все приведенные здесь функции во первых "глотают" ошибки, которые в io выглядят как nil+message, во-вторых небезопасны в смысле исключений.
Например:
Теперь, например, сделаем 11.gz read-only:
... т.е. первый файл остался открытым до тех пор, пока его не соберет сборщик мусора, так-как исключение не дало вызвать source:close().
Про один из подходов к безопасной работой с ресурсами можно почитать тут: http://lua-users.org/wiki/FinalizedExceptions - Диего Нехаб пишет как он сделал в luasocket.
Я обычно пользуюсь похожим, но более общим (который подходит для Лиспа, Скалы, SML и вообще для любого язака с функциями высших порядков) способом.
Когда все нормально (уберем read-only):
Т.е. все само вовремя закрывается, деструкторы вызываются в порядке, обратном вызову конструкторов. Синтаксис громоздкий, но это Луа В Scala, например, это выглядит намного изящнее:
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 14/06/2008 16:15:13
|
mozers™
Новичок
Зарегистрирован: 08/05/2008 16:18:54
Сообщений: 27
Оффлайн
|
2z00n
Сильно
Код профессионала сильно отличается от кода новичка - я нефига не понял как работают эти циклы - тупо скопировал все в свой скрипт.
Стандартное решение os.execute("cmd /c copy "..source..destantion) этому и в подметки не годится!
Скорость выполнения выросла более чем в 100 раз!!! (у меня непрерывно копируются маленькие файлы).
Про то, что исчезло это, дико раздражающее, постоянно мигающее консольное окошко я уже не говорю...
Браво, автор!
|
|
|
 |
|
|
|
|