Lua loadfile()无法在同一目录中找到文件

时间:2014-03-14 01:17:00

标签: c++ lua

奇怪的问题在这里。 我有一个Lua脚本(' human.lua'),它通过C ++应用程序中的dofile()执行。

我尝试在第一行以非常标准的方式加载另一个AI脚本文件:

behavior_chunk = assert(loadfile("testBehavior.lua"))

此抛出无法打开testBehavior.lua:没有这样的文件或目录"。 testBehavior.lua与human.lua在同一个目录中。

这是怎么回事? package.path会以某种方式错误地设置吗? 我已就此进行了大量研究,无法找到可能导致此特定问题的原因。

也许我错过了一些非常明显的东西。

2 个答案:

答案 0 :(得分:1)

loadfile路径相对于工作目录,而不是相对于脚本位置。因此,如果您从文件夹A启动Lua以运行B\human.lua,则loadfile("C/testBehavior.lua")中的human.lua会在testBehavior.lua中查找A/C,而不是B/C 1}}。

因此,如果你的文件夹结构是:

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的文件夹。

答案 1 :(得分:1)

感谢您的更新。

然而,在C ++中加载脚本可以完美地运行,当我从WITHIN加载Lua脚本时,问题出现了,我从C ++加载了Lua脚本:

behavior_chunk = assert(loadfile("testBehavior.lua"))

如何在Lua脚本(而不是C ++)中正确使用loadfile来在同一目录或子目录中加载另一个Lua文件?

我的理由是我装载了人类。来自&#39;脚本&#39;用C ++编写的。现在里面是人类的.lua&#39;我加载了另一个脚本,该脚本与该脚本位于同一目录中,那么为什么这样做不起作用呢?

也许我没有说清楚这一点。如果情况确实如此,我道歉。