Проверка существования папки из Lua

Опубликовано в QLua

В стандартной библиотеке io нет функции, проверяющей существование каталога. А мне понадобилась. Немного подумав, интереса ради решил поэкспериментировать. Получился бантик, позволивший обойтись без С++ и внешних библиотек.

 Переименовываем папку саму в себя и смотрим результат:

-- Проверка существования папки
-- Возвращает
-- true/false результат выполнения
-- строка диагностики или nil в случае успеха
-- имя папки в случае ошибки
function directory_exists(directory)
      return os.rename(directory,directory)
end

Что характерно. В стандартном руководстве на LUA указано, что os.rename() возвращает только 2 значения. Оказалось, что есть и третий - имя самого файла/папки, причем без буквы диска и двоеточия.

P.S. Нужно учитывать права доступа и открытые файлы внутри папки.

Комментарии   

# kalikazandr 16.01.2020 14:51
Здравствуйте!
А как учитывать права доступа?
есть папка: "C:\\test"
в ней хочу создать еще пару папок:
dir = {
dir1 = "C:\\test\\dir1",
dir2 = "C:\\test\\dir2"
}
for k, v in pairs(dir) do
if not directory_exist s(v) then
os.execute("mkd ir " .. v)
end
end
Иногда создает, а иногда нет.
Почему "иногда создает" отловить не получилось.
# admin 16.01.2020 16:33
На самом деле самый правильный вариант - это использовать сишную функцию mkdir

Она есть в библиотеке lfs и других библиотеках для луа. В частности, она есть в bot4sale64.dll. По возвращаемым значениям (их кажется 3) можно узнать результат создания папки и диагностику.

Из os.execute вытащить статуса успеха довольно трудно. Можно, конечно после создания папки создать в ней файл через io.open и тоже посмотреть возвращаемые значения. При успеха - удалить файл.

Можно перенаправить стандартный вывод. os.execute в файл и прочесть его. Можно просто использовать функцию. Popen(), но будет моргать черный квадрат Малевича на экране.

Недостаточно прав для комментирования

Архив QLua