代码之家  ›  专栏  ›  技术社区  ›  Brian T Hannan

为什么当从C++应用程序调用时,LuAZIP不提取文件?

  •  2
  • Brian T Hannan  · 技术社区  · 15 年前

    我有一个与LUA文件接口的C++应用程序。我有一个lua文件,它可以提取zip文件,当我使用scite或lua命令行运行它时,该文件可以工作。但是当我试图从C++应用程序运行它时,它似乎不起作用。

     require "zip"
    
    function ExtractZipFiles(zipFilename, destinationPath)
        zipFile, err = zip.open(zipFilename)
    
        -- iterate through each file insize the zip file
        for file in zipFile:files() do
            currentFile, err = zipFile:open(file.filename)
            currentFileContents = currentFile:read("*a") -- read entire contents of current file
            currentFile:close()
            hBinaryOutput = io.open(destinationPath .. file.filename, "wb")
    
            -- write current file inside zip to a file outside zip
            if(hBinaryOutput)then
                hBinaryOutput:write(currentFileContents)
                hBinaryOutput:close()
            end
        end
    
        zipFile:close()
    end
    
    -- Unit Test
    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;
    }
    
    1 回复  |  直到 15 年前
        1
  •  4
  •   Kornel Kisielewicz    15 年前

    首先检查错误:

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

    除此之外,我猜Lua找不到zip模块——请检查包路径设置,阅读 Lua manual .

    通常,您需要检查 zip 模块是( zip.lua ?)并确保它在运行时是可访问的(例如,如果所有其他操作都失败,您可以手动加载它)。