Как создать каталог в Lua?

Можно ли создать каталог в lua? Если да, то как?


person Wookai    schedule 06.11.2009    source источник


Ответы (4)


Там есть «системный» вызов (или что-то в этом роде, это из памяти), который вы должны иметь возможность использовать для запуска произвольной программы, которая может включать команду mkdir.

EDIT: я нашел свою книгу Programming in Lua. На странице 203 упоминается, как вы могли бы использовать

os.execute("mkdir " .. dirname)

для «подделки» команды создания каталога.

РЕДАКТИРОВАТЬ 2: Обратите внимание на предупреждение Йонаса Тима о том, что этой командой можно злоупотреблять, если имя каталога получено из ненадежного источника!

person Carl Smotricz    schedule 06.11.2009
comment
Философия дизайна Lua заключается в том, чтобы быть чистым ISO C, чтобы его можно было переносить на что угодно с компилятором C. В стандартной библиотеке C нет функции создания каталога. Это оставлено на усмотрение расширений для конкретных платформ, таких как mkdir(2) в системах POSIX и CreateDirectory*() в Windows. - person Warren Young; 07.11.2009
comment
Спасибо ;) ! Я знал, что могу выполнить такой метод execute(), но мне было интересно, есть ли альтернатива Lua... Думаю, что нет ;)! - person Wookai; 07.11.2009
comment
Этот ответ очень опасен. Как только ваше имя каталога содержит ; за которыми следуют фактические команды bash, вы настраиваете себя на хороший эксплойт для выполнения произвольной команды. Будьте очень осторожны, чтобы правильно избежать имени каталога - или просто пропустите этот плохой совет и вместо этого используйте LuaFileSystem, чтобы делать все правильно. - person E. T.; 13.08.2014
comment
Спасибо, что указали, что (сейчас) есть библиотека LuaFileSystem для таких вещей! Я проголосовал за ответ, который рекомендует его использовать. Но упрекнули ли вы также автора Lua в том, что он рекомендовал эту технику в своей книге? Подход os.execute() прекрасно подходит, если имена каталогов взяты из надежных источников, например. жестко запрограммирован в программе, и его преимущество заключается в том, что он не требует каких-либо библиотек, кроме стандарта Lua. - person Carl Smotricz; 14.08.2014
comment
Правильно экранировать имя файла нетривиально, и даже если автор Lua рекомендует это, я бы не советовал этого делать. Лучше использовать правильную библиотеку расширений. Это работает, да, но это небезопасно, за исключением случаев, когда вы очень хорошо знакомы с возможными эксплойтами (и есть много символов, которые могут показаться обычными в имени файла, но сделают что-то в bash и внезапно введут произвольную команду выполнение в простое создание каталога), или если имя файла жестко запрограммировано. Если бы автор сам не добавил такой сильный совет по безопасности, то я бы сказал, что этот раздел в книге следует пересмотреть. - person E. T.; 21.08.2014

Вам может пригодиться библиотека LuaFileSystem. У него есть функция mkdir.

require "lfs"
lfs.mkdir("/path/to/dir")
person Arthur Reutenauer    schedule 06.11.2009
comment
Спасибо за ссылку! На данный момент я не могу использовать другие библиотеки, поэтому я буду придерживаться версии os.execute(), но в следующий раз буду иметь в виду LuaFileSystem! - person Wookai; 09.11.2009

Вы также можете взглянуть на Lua/APR, привязку Apache Portable Runtime для Lua. Документы можно найти по адресу здесь

Одна из причин, по которой я использую Lua, заключается в том, что я могу писать код, работающий в нескольких операционных системах. Я использовал LFS в течение некоторого времени, но обнаружил, что использование Lua/APR обеспечивает более нейтральную к платформе библиотеку. И есть много других полезных подпрограмм в APR.

person squirrelpiles    schedule 10.06.2012

Вместо этого вы можете использовать пакет paths. Тогда вы можете просто сделать:

require 'paths'

paths.mkdir('your/dir')
person Amir    schedule 19.10.2016