本来lua遍历文件夹下压缩包内容、路径可以通过加载模块: require(“lfs”) 和 require(“zip”) 来解决。
但是本人通过c++调用lua时,只要lua脚本中使用require加载模块,就会出错。
因此为了能够让c++通过lua,解压当前路径下压缩包,并读取其中文件内容。并没有使用加载模块的方法,而是结合os.execute()系统命令和7z压缩包命令行。
lua调用os.execute()系统命令,其实就相当于c中调用system()命令,也就相当于windows下cmd命令,因此可以自行查找相关命令。
本例中,压缩包在第一级目录,lua脚本放在script文件夹中。
文章来源:https://www.toymoban.com/news/detail-529513.html
需求为:解压第一级目录的压缩包到脚本所在目录,然后读取解压出来的文件夹其中的xml文件内容数据,最后再把解压出来的整个文件夹删除。文章来源地址https://www.toymoban.com/news/detail-529513.html
--当前为windows环境
--获取当前路径
function getcurrDir()
os.execute("cd > cd.tmp")
local f = io.open("cd.tmp", r)
local cwd = f:read("*a")
f:close()
os.remove("cd.tmp")
cwd = string.sub(cwd, 1, -2)
cwd = string.gsub(cwd,"\\","\\\\")
return cwd
end
--解压当前目录下指定压缩包到指定文件夹,并返回其中xml文件数据
zipname = "CN-PA-PRSS-10.zip"
curpath = getcurrDir()
function getZipData(zipname)
dirname = "zipfile"
os.execute("7z x ../"..zipname.." -o"..dirname) --解压上级目录的压缩包,到当前脚本所在目录指定文件夹中
os.execute("dir "..dirname.."/s/b/a-d > dir.tmp") --输出指定文件夹下所有子目录中属性不为目录的文件名,到临时文件
local f = io.open("dir.tmp", r)
local cwd = f:read("*a")
f:close()
os.remove("dir.tmp")
cwd = string.sub(cwd, 1, -2)
cwd = string.gsub(cwd, "\\", "\\\\")
local f = io.open(cwd, r)
local data = f:read("*a")
f:close()
os.execute("rd /s/q " ..curpath.."\\"..dirname) --删除解压出来的文件夹
return data
end
getZipData(zipname)
到了这里,关于Lua,不使用模块,解压文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!