Проверка существования директории

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 имеет накладные расходы из-за создания нового процесса, поэтому будьте осторожны в плотном цикле.

Смотрите также