Lua-loadfile()在同一目录中找不到文件

Lua loadfile() cannot find file in same directory

本文关键字:找不到 文件 Lua-loadfile      更新时间:2023-10-16

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

我试图在第一行加载另一个文件,它是一个非常标准的AI脚本:

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

这引发了"无法打开testBehavior.rua:没有这样的文件或目录"。testBehavior.loa与human.loa.位于同一目录中

这是怎么发生的?package.path可能被错误地设置了吗?我对此做了很多研究,但找不到是什么原因导致了这个特定的问题。

也许我错过了一些显而易见的东西。

loadfile路径是相对于工作目录的,而不是相对于脚本位置的。因此,如果您从文件夹A启动Lua以运行Bhuman.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[])
{
    ... 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 aitestBehavior.lua
success

但是

C:FooScripts> ../yourLuaApp.exe file1.lua 
error

因为您是从Scripts文件夹启动应用程序的,该文件夹不包含名为Scripts的文件夹。

感谢您的更新。

然而,在C++中加载脚本是完美的,当我从WITHINE加载Lua脚本时,问题就出现了,我从C++加载了Lua脚本:

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

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

我的理由是,我从C++中的"scripts"目录加载了"human.loa"。现在,在"human.loa"中,我加载了另一个与该脚本位于同一目录中的脚本,为什么不起作用呢?

也许我说得不够清楚。如果是这样的话,我道歉。