Вы попробовали это?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
Проблема в том, что стандартный дистрибутив Lua (почти) включает только те функции, которые указаны в стандарте C. Стандарт C не делает никаких предположений о существовании какой-либо конкретной файловой системы ( или даже операционная система, если на то пошло), поэтому модули os
и io
не предоставляют информацию о доступе, недоступную в стандартной библиотеке C.
Если вы пытались это сделать. при программировании на чистом стандарте C возникнет такая же проблема.
Существует вероятность того, что вы сможете узнать, существует ли папка неявно, при попытке ее использовать. Если вы ожидаете, что он существует и доступен для записи, создайте там временный файл, и если это удастся, папка существует. В случае сбоя вы не сможете отличить несуществующую папку от недостаточных разрешений, конечно.
Безусловно, самым легким ответом на получение конкретного ответа была бы тонкая привязка только к тем вызовам специфичных для ОС функций, которые предоставляют необходимую информацию. Если вы можете принять модуль lua alien , тогда вы можете сделать привязку в остальном чистый Lua.
Проще, но немного тяжелее, - принять файловую систему Lua. Он предоставляет переносной модуль, который поддерживает большинство вещей, которые можно захотеть узнать о файлах и файловой системе.
Если вас особенно интересует отказ от библиотеки LFS, библиотека Lua Posix имеет интерфейс для stat ().
require 'posix'
function isdir(fn)
return (posix.stat(fn, "type") == 'directory')
end
Ну, в справочном руководстве 5.1 ничего нет в таблице ОС , но если вы используете Nixstaller , вы получите ОС .fileexists
именно для того, что вы объяснили.
Если вы можете позволить себе немного повозиться или если вы знаете, на какой ОС вы будете работать, вам может сойти с рук стандартная библиотека ОС ] os.execute
с некоторым системным вызовом, который определяет, существует ли файл.
Еще лучше, чем os.execute, может быть os.rename:
os.rename (старое имя, новое имя)
Переименовывает файл с именем
старое имя
нановое имя
. Если эта функция терпит неудачу, она возвращает nil плюс строка, описывающая ошибка.
Вы можете попробовать установить одинаковое старое и новое имя - однако у вас может не быть разрешений на запись, поэтому может произойти сбой, потому что вы не можете писать, хотя вы можете читать. В этом случае вам нужно будет проанализировать возвращенную строку с ошибкой и определить, можете ли вы написать, или вам нужно будет просто попробовать выполнить свою функцию, для которой нужен существующий файл, и обернуть ее в pcall
.