为什么从C++应用程序调用luazip时无法提取文件?

我有一个 C++ 应用程序与 lua 文件交互。我有一个 lua 文件,可以提取 zip 文件,在使用 SciTe 或 Lua 命令行运行时可正常工作。但是当我尝试从 C++ 应用程序运行它时,似乎不起作用。

require "zip"

function ExtractZipFiles(zipFilename, destinationPath)
    zipFile, err = zip.open(zipFilename)

    -- 遍历 zip 文件中的每个文件
    for file in zipFile:files() do
        currentFile, err = zipFile:open(file.filename)
        currentFileContents = currentFile:read("*a") -- 读取当前文件的所有内容
        currentFile:close()
        hBinaryOutput = io.open(destinationPath .. file.filename, "wb")

        -- 将 zip 中的当前文件写入 zip 外的文件中
        if(hBinaryOutput)then
            hBinaryOutput:write(currentFileContents)
            hBinaryOutput:close()
        end
    end

    zipFile:close()
end

-- 单元测试
ExtractZipFiles("SZProcessTests.zip", "Infections\\") 

如果计算机上安装了 Lua,并双击 lua 文件,则会运行并按预期提取文件。但是,如果我尝试像这样从 C++ 运行 lua 文件,则无法正常工作:

void CSZTestClientMessagesDlg::OnBtnExecute()
{
    L = lua_open();
    luaL_openlibs(L);
    luaL_dofile(L, "ExtractZipFiles.lua");
    lua_close(L);

    return;
}

原文链接 https://stackoverflow.com/questions/2877319

点赞
stackoverflow用户233522
stackoverflow用户233522

首先检查错误:

if (luaL_dofile(L, "ExtractZipFiles.lua"))
{
    std::cerr << "Lua error : " << lua_tostring(L, -1) << std::endl;
}

除此之外,我猜测 Lua 找不到 zip 模块 - 检查您的包路径设置,在Lua手册中阅读有关 require 的说明。

总的来说,您需要检查 zip 模块在哪里 (zip.lua?),并确保在运行时可以访问它(如果出现其他问题,您可以手动加载它)。

2010-05-20 20:20:57