Проверьте, существует ли каталог в lua?

Вы попробовали это?

UNIQUE KEY `thekey` (`user`,`email`,`address`)
12
задан Dan 27 August 2009 в 10:37
поделиться

3 ответа

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

Если вы пытались это сделать. при программировании на чистом стандарте C возникнет такая же проблема.

Существует вероятность того, что вы сможете узнать, существует ли папка неявно, при попытке ее использовать. Если вы ожидаете, что он существует и доступен для записи, создайте там временный файл, и если это удастся, папка существует. В случае сбоя вы не сможете отличить несуществующую папку от недостаточных разрешений, конечно.

Безусловно, самым легким ответом на получение конкретного ответа была бы тонкая привязка только к тем вызовам специфичных для ОС функций, которые предоставляют необходимую информацию. Если вы можете принять модуль lua alien , тогда вы можете сделать привязку в остальном чистый Lua.

Проще, но немного тяжелее, - принять файловую систему Lua. Он предоставляет переносной модуль, который поддерживает большинство вещей, которые можно захотеть узнать о файлах и файловой системе.

12
ответ дан 2 December 2019 в 03:16
поделиться

Если вас особенно интересует отказ от библиотеки LFS, библиотека Lua Posix имеет интерфейс для stat ().

require 'posix'
function isdir(fn)
    return (posix.stat(fn, "type") == 'directory')
end
9
ответ дан 2 December 2019 в 03:16
поделиться

Ну, в справочном руководстве 5.1 ничего нет в таблице ОС , но если вы используете Nixstaller , вы получите ОС .fileexists именно для того, что вы объяснили.

Если вы можете позволить себе немного повозиться или если вы знаете, на какой ОС вы будете работать, вам может сойти с рук стандартная библиотека ОС ] os.execute с некоторым системным вызовом, который определяет, существует ли файл.

Еще лучше, чем os.execute, может быть os.rename:

os.rename (старое имя, новое имя)

Переименовывает файл с именем старое имя на новое имя . Если эта функция терпит неудачу, она возвращает nil плюс строка, описывающая ошибка.

Вы можете попробовать установить одинаковое старое и новое имя - однако у вас может не быть разрешений на запись, поэтому может произойти сбой, потому что вы не можете писать, хотя вы можете читать. В этом случае вам нужно будет проанализировать возвращенную строку с ошибкой и определить, можете ли вы написать, или вам нужно будет просто попробовать выполнить свою функцию, для которой нужен существующий файл, и обернуть ее в pcall .

5
ответ дан 2 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: