Lua的loadfile()函数无法在同一目录下找到文件。

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

我尝试以相当标准的方式在第一行加载另一个文件,这是一个AI脚本:

behavior_chunk = assertloadfile(“testBehavior.lua”))

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

这是怎么发生的? 可能某种方式设置了package.path吗? 我对此进行了大量研究,但无法找到可能导致此特定问题的原因。

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

点赞
用户869951
用户869951

loadfile 路径是相对于工作目录的,而不是相对于脚本位置的。因此,如果你从文件夹 A 启动 Lua 来运行 B\human.lua,那么 human.lua 中的 loadfile("C/testBehavior.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[])
{
    ... 初始化 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

但是,如果您从 Scripts 文件夹启动您的应用程序,它不包含名为 Scripts 的文件夹,因此您会得到以下结果:

C:\Foo\Scripts> ../yourLuaApp.exe file1.lua
error
2014-03-14 03:58:19
用户3418022
用户3418022

感谢更新。

然而,在 C++ 中加载脚本可以无缝运行,但是当我从加载了 C++ 的 Lua 脚本中加载另一个 Lua 脚本时就会出现问题:

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

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

我的想法是,我从 C++ 中的 'scripts' 目录中加载了 'human.lua'。现在,在 'human.lua' 中,我加载了位于该脚本相同目录中的另一个脚本,那么为什么这不起作用呢?

也许我没有讲清楚。如果是这样,我很抱歉。

2014-03-17 18:29:52