Проверка существования папки из Lua
В стандартной библиотеке io нет функции, проверяющей существование каталога. А мне понадобилась. Немного подумав, интереса ради решил поэкспериментировать. Получился бантик, позволивший обойтись без С++ и внешних библиотек.
Переименовываем папку саму в себя и смотрим результат:
-- Проверка существования папки
-- Возвращает
-- true/false результат выполнения
-- строка диагностики или nil в случае успеха
-- имя папки в случае ошибки
function directory_exists(directory)
return os.rename(directory,directory)
end
Что характерно. В стандартном руководстве на LUA указано, что os.rename() возвращает только 2 значения. Оказалось, что есть и третий - имя самого файла/папки, причем без буквы диска и двоеточия.
P.S. Нужно учитывать права доступа и открытые файлы внутри папки.
Комментарии
А как учитывать права доступа?
есть папка: "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
Иногда создает, а иногда нет.
Почему "иногда создает" отловить не получилось.
Она есть в библиотеке lfs и других библиотеках для луа. В частности, она есть в bot4sale64.dll. По возвращаемым значениям (их кажется 3) можно узнать результат создания папки и диагностику.
Из os.execute вытащить статуса успеха довольно трудно. Можно, конечно после создания папки создать в ней файл через io.open и тоже посмотреть возвращаемые значения. При успеха - удалить файл.
Можно перенаправить стандартный вывод. os.execute в файл и прочесть его. Можно просто использовать функцию. Popen(), но будет моргать черный квадрат Малевича на экране.
RSS лента комментариев этой записи