Lua:
Проверка существования директории
Как сделать:
В стандартных библиотеках Lua нет встроенной обработки директорий. Часто используют os.execute
с test
на Unix или os.getenv
на Windows. Вот как это делается:
local function is_directory_exists(path)
if package.config:sub(1,1) == '\\' then -- проверка для Windows
local cd_result = os.execute('cd ' .. path .. ' 2>nul')
return cd_result == true or cd_result == 0
else -- предполагаем систему похожую на Unix
local test_result = os.execute('[ -d "' .. path .. '" ]')
return test_result == true or test_result == 0
end
end
print(is_directory_exists("/path/to/check/")) -- Системы похожие на Unix
print(is_directory_exists("C:\\path\\to\\check\\")) -- Системы Windows
Пример вывода может быть просто true
, если директория существует, или false
, если её нет.
Подробнее
В ранние годы развития вычислительной техники управление файлами было критически важно в операционных системах, и проверка существования директорий выполнялась простыми командами оболочки. Lua, хотя и разработана для встраивания и расширения, остается минималистичной и, таким образом, полагается на внешние вызовы для таких задач.
Функция os.execute
в Lua выполняет системную команду, делая её универсальной для этой цели. Системы на базе Unix хорошо реагируют на флаг -d
, который проверяет наличие директорий. В Windows попытка смены директории с помощью cd
служит нашей проверке.
Есть альтернативы, например, библиотека lfs
(LuaFileSystem), которая предоставляет lfs.attributes(path, "mode")
, более надежный и читаемый метод для выполнения той же задачи, но это требует установки дополнительных зависимостей.
По причинам производительности, прямые системные вызовы могут быть быстрее, чем использование полной библиотеки, особенно для простых задач, таких как проверка существования директории. Однако, использование os.execute
имеет накладные расходы из-за создания нового процесса, поэтому будьте осторожны в плотном цикле.
Смотрите также
- Документация LuaFileSystem: http://keplerproject.github.io/luafilesystem/manual.html
- Справочник по библиотеке
os
Lua: https://www.lua.org/manual/5.4/manual.html#6.9 - “Программирование на Lua” для более глубокого понимания языка: https://www.lua.org/pil/