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

标签 c++ lua

这里有奇怪的问题。 我有一个通过 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.luaA/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/

相关文章:

c++ - 调试窗口立即关闭

javascript - 按位运算符比 + 和 - 运算符更快

c++ Sentinel循环,存储最小和最大数字

c - 如何使用c代码读取复杂的lua表

android - Lua Service2Media 移动端

lua - 计算一个值在 Lua 表中出现的次数

c++ - 学校作业的简单密码加密

c++ - 为什么在 C++14 中使用 std::bind 而不是 lambda?

variables - 自定义变量类型 Lua

lua - 在 Torch 中添加自定义损失函数