Lua loadfile не находит файл
У меня был некоторый код lua со следующей строкой:
JSON = loadfile("JSON.lua")()
Файл JSON.lua находится в том же каталоге, что и код lua, из которого пришла строка. Этот код работал у меня некоторое время, а затем, не изменив ни исходный код lua, ни JSON.lua, ни разрешение каких-либо файлов, ни каталог, из которого я выполнял код lua, я начал получать ноль ошибка в этой строке. (Я просто не помню НИКАКИХ соответствующих изменений, которые могли бы оказать какое-либо влияние на код lua.)
Добавление подтверждения показало, что ошибка была вызвана тем, что файл не был найден. Игра с правами доступа к файлам, перезапуск моего компьютера не решили проблему, а возврат кода, который я зарегистрировал и работал отлично, не решил эту ошибку.
Я исправил ошибку, изменив приведенную выше строку, указав абсолютный путь к этому файлу JSON.lua.
Есть ли что-то, объясняющее, почему код без абсолютного пути мог работать некоторое время, а затем перестал работать?
Примечание. Такое поведение работы, а затем не работы происходило со мной дважды за неделю. Я озадачен, и хотя теперь я нашел решение, мне действительно любопытно, как объяснить такое прерывистое поведение.
2 ответа
Луа использует package.path
, чье значение по умолчанию берется из переменной окружения LUA_PATH, если оно задано, в качестве списка каталогов для поиска. Вы можете положить .
в начале этого списка, чтобы загрузить файлы из текущего каталога, или вы можете поместить свои файлы в путь в списке.
Поздний ответ на это, так как я обнаружил точно такую же проблему.
Во-первых, вопреки предыдущему ответу, loadfile
не использует package.path
путь поиска. Он выглядит только в указанном каталоге. И если вы не укажете каталог, он будет выглядеть только в "текущем каталоге". Я не могу точно объяснить, почему он перестал работать на вас, но, вероятно, ваш Lua-код каким-то образом запускается с "текущим каталогом", отличным от предыдущего.
Существует два возможных исправления: одно - указать абсолютный путь к loadfile
,
JSON = loadfile("c:\\my_folder\\JSON.lua")()
Альтернативное исправление зависит от конкретной библиотеки, которую вы используете, и я подозреваю, что это библиотека Lua JSON Джеффри Фридла. Поскольку это поддерживает более новый механизм модуля Lua, вы можете просто загрузить модуль с помощью require
, который поддерживает package.path
путь поиска.
JSON = require("JSON")