这里有奇怪的问题。
我有一个通过 C++ 应用程序中的 dofile()
执行的 Lua 脚本('human.lua')。
我尝试在第一行以非常标准的方式加载另一个 AI 脚本文件:
behavior_chunk = assert(loadfile("testBehavior.lua"))
这会抛出“无法打开 testBehavior.lua:没有这样的文件或目录”。 testBehavior.lua 和 human.lua 在同一个目录下。
这是怎么回事? package.path 是否会以某种方式错误设置? 我对此进行了大量研究,但找不到可能导致此特定问题的原因。
也许我遗漏了一些非常明显的东西。
最佳答案
loadfile
路径是相对于工作目录的,而不是相对于脚本位置的。因此,如果您从文件夹 A
启动 Lua 以运行 B\human.lua
,那么 loadfile("C/testBehavior.lua")
来自 human.lua
在 A/C
中查找 testBehavior.lua
,而不是在 B/C
中。
所以如果你的文件夹结构是:
Foo
yourLuaApp.exe
Scripts
human.lua
file1.lua
file2.lua
ai
testBehavior.lua
然后说你有 C++
int main(argc, char* argv[])
{
... init Lua ...
std::string fullname = "scripts/" + argv[1];
if (luaL_dofile(pLua, fullname.c_str()))
std::cerr << "error" << endl;
else
std::cout << "success" << endl;
}
然后你会得到这些结果:
C:\Foo> yourLuaApp.exe file1.lua
success
C:\Foo> yourLuaApp.exe ai\testBehavior.lua
success
但是
C:\Foo\Scripts> ../yourLuaApp.exe file1.lua
error
因为您是从 Scripts
文件夹启动您的应用程序,该文件夹不包含名为 Scripts
的文件夹。
关于c++ - Lua loadfile() 无法在同一目录中找到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22394309/