Проблема в том, что стандартный дистрибутив Lua (почти) включает только функции, указанные в стандарте C. Стандарт C не делает никаких предположений о том, что на самом деле существует файловая система какого-либо конкретного вида (или даже операционная система, для это имеет значение), поэтому модули os
и io
не предоставляют информацию о доступе, недоступную в стандартной библиотеке C.
Если бы вы пытались кодировать в чистом стандартном C, у вас возникла бы та же проблема.
Существует вероятность того, что вы можете узнать, существует ли папка неявно, при попытке ее использовать. Если вы ожидаете, что он будет существовать и будет доступен для записи, создайте там временный файл и, если это удастся, папка существует. Если это не удастся, вы, конечно, не сможете отличить несуществующую папку от недостаточных разрешений.
Безусловно, самым легким ответом на получение конкретного ответа была бы тонкая привязка только к тем вызовам функций для конкретной ОС, которые предоставляют необходимую вам информацию. Если вы можете принять модуль lua alien , тогда вы можете выполнить связывание в чистом Lua.
Проще, но немного тяжелее, принять Lua File System. Он предоставляет переносной модуль, который поддерживает большинство вещей, которые можно узнать о файлах и файловой системе.