2010-05-20 31 views
2

我有一個與lua文件接口的C++應用程序。我有一個提取zip文件的lua文件,當我使用SciTe或Lua命令行運行時,它可以工作。但是當我嘗試從C++應用程序運行它時,它似乎不起作用。從C++應用程序調用時,爲什麼不luazip提取文件?

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雙擊文件和按預期的方式提取文件。

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

    return; 
} 
+0

你會得到什麼錯誤? – 2010-05-20 20:04:58

回答

4

首先檢查是否存在錯誤:但是,如果我嘗試運行從C LUA文件++這樣它不工作

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

除此之外,我的猜測是,Lua中找不到zip模塊 - 檢查您的包路徑設置,在Lua manual中閱讀有關require的要求。

通常,您需要檢查zip模塊的位置(zip.lua?)並確保它在運行時可訪問(例如,如果所有其他設備都失敗,可以手動加載它)。

+0

偉大的迴應,這是非常有益的。 – 2010-05-20 22:01:59

相關問題