首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么lua在解压缩压缩文件之后会崩溃?

为什么lua在解压缩压缩文件之后会崩溃?
EN

Stack Overflow用户
提问于 2010-05-13 21:03:16
回答 2查看 379关注 0票数 1

我有下面的代码,但是每次它到达函数结束时都会崩溃,但是它成功地提取了所有文件并将它们放置在正确的位置。

代码语言:javascript
复制
require "zip"

function ExtractZipAndCopyFiles(zipPath, zipFilename, destinationPath)
    local zfile, err = zip.open(zipPath .. zipFilename)

    -- iterate through each file insize the zip file
    for file in zfile:files() do
        local currFile, err = zfile:open(file.filename)
        local currFileContents = currFile:read("*a") -- read entire contents of current file
        local hBinaryOutput = io.open(destinationPath .. file.filename, "wb")

        -- write current file inside zip to a file outside zip
        if(hBinaryOutput)then
            hBinaryOutput:write(currFileContents)
            hBinaryOutput:close()
        end
    end

    zfile:close()
end
-- call the function
ExtractZipAndCopyFiles("C:\\Users\\bhannan\\Desktop\\LUA\\", "example.zip", "C:\\Users\\bhannan\\Desktop\\ZipExtractionOutput\\")

为什么每次到达终点它都会崩溃?

EN

Stack Overflow用户

发布于 2010-05-14 14:29:49

问题是,在关闭包含这些文件的打开zip文件之前,LuaZip不会遍历所有打开的内部文件并关闭它们。因此,当垃圾收集器试图关闭内部文件时,系统稍后会崩溃。因此,简单地删除zfile:close()行也将修复此崩溃,因为垃圾收集器将按反向分配顺序释放userdata

在提交补丁之前,我想与Danilo、Andre和Tomas讨论可能的解决方案,因为需要做出一些设计决策。例如,如果当客户端代码关闭zip文件时打开了内部文件,那么在释放所有内部文件或使对每个内部文件的打开引用无效之前,您会一直打开zip文件吗?也许应该让它单独使用,并且应该指示用户:(a)让垃圾收集器处理关闭所有内部和zip文件;或者(b)在关闭包含的zip文件之前显式关闭所有内部文件。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2830298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档