[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Функция os.copy(source, destantion)  XML
Forum Index » LUA: Общие вопросы
Author Message
mozers™
Новичок

Joined: 08/05/2008 16:18:54
Messages: 27
Offline

C удивлением обнаружил что такая необходимая функция в Lua отсутсвует.
Написал свою:

Работает
Только подумалось мне что наверняка этот вопрос при лучшем знании Lua можно решить элегантнее
(Условие одно: используем только стандартные возможности Lua)
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

Для Linux и ему подобных: вместо "copy" подставить "cp" (и возможно, поменять местами одинарные и двойные кавычки).

This message was edited 2 times. Last update was at 16/05/2008 00:06:25

mozers™
Новичок

Joined: 08/05/2008 16:18:54
Messages: 27
Offline

Ну да, конечно есть os.execute с помощью которой можно сделать все что может ОС.
Вариант принимается.
Но я как то недолюбливаю ее примитивную реализацию с мигающим окном консоли, поэтому от такого варианта отказался сразу.
А варианты решения без os.execute есть?
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

mozers™ wrote:А варианты решения без os.execute есть?

Кроме вышеприведенных двух, есть вариант использования дополнительных библиотек для Lua. Например, я пользуюсь (неопубликованной) библиотекой SysUtils, которая содержит функцию sysutils.CopyFile.

This message was edited 2 times. Last update was at 16/05/2008 11:12:35

mozers™
Новичок

Joined: 08/05/2008 16:18:54
Messages: 27
Offline

2smz
Не... Внешние библиотеки - это уже нарушение условий задачи.
Я просто думал что мой код можно переписать более благообразно...
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

mozers™ wrote:2smz
Я просто думал что мой код можно переписать более благообразно...
Пожалуйста. Здесь починены 2 проблемы из 3-х имеющихся в оригинале. Третья - то что входной файл читается сразу целиком - это будет проблемой для файлов размером в несколько гигабайтов. Но это уже оставлено как упражнение для автора.
__Alexey__
Новичок

Joined: 19/05/2008 18:23:35
Messages: 9
Offline



smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

__Alexey__ wrote:

Здесь присутствуют все 3 дефекта, имеющиеся в оригинальной версии mozers™
А в дополнение - ещё один: на выходе из ф-ции не восстановлено прежнее значение io.output.

This message was edited 3 times. Last update was at 19/05/2008 19:46:12

__Alexey__
Новичок

Joined: 19/05/2008 18:23:35
Messages: 9
Offline

Зато 1 строка.
__Alexey__
Новичок

Joined: 19/05/2008 18:23:35
Messages: 9
Offline

This message was edited 3 times. Last update was at 19/05/2008 22:41:03

smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

__Alexey__
Уже лучше, если не считать небрежности. Вот твоя ф-ция с поправками:
__Alexey__
Новичок

Joined: 19/05/2008 18:23:35
Messages: 9
Offline

Нет смысла увеличивать буфер.
Для проверки на вашем железе:



smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

__Alexey__ wrote:Нет смысла увеличивать буфер.
Для проверки на вашем железе:

Проверка на моём железе дала оптимальный буфер в размере 8 KB. Но это для меня бесполезные данные, т.к. я не копирую файлы подобными функциями. Пользуюсь либо библиотекой на Си, либо os.execute.
__Alexey__
Новичок

Joined: 19/05/2008 18:23:35
Messages: 9
Offline

Сильно медленней, чем библиотечная функция (на С)?
smz
ГУРУ

Joined: 14/03/2008 13:23:00
Messages: 282
Offline

__Alexey__ wrote:Сильно медленней, чем библиотечная функция (на С)?
Библиотечная функция, которую я имел в виду - это просто обёртка вокруг CopyFile из Windows API. К моему удивлению, её скорость при копировании больших файлов практически та же, что и у вышеприведенных Lua функций. Но тут дело не в скорости: просто предпочитаю пользоваться стандартной функцией, а не изобретать велосипед.
 
Forum Index » LUA: Общие вопросы
Go to:   
Powered by JForum 2.1.9 © JForum Team