Lua,不使用模块,解压文件


本来lua遍历文件夹下压缩包内容、路径可以通过加载模块: require(“lfs”) 和 require(“zip”) 来解决。
但是本人通过c++调用lua时,只要lua脚本中使用require加载模块,就会出错。


因此为了能够让c++通过lua,解压当前路径下压缩包,并读取其中文件内容。并没有使用加载模块的方法,而是结合os.execute()系统命令和7z压缩包命令行。


lua调用os.execute()系统命令,其实就相当于c中调用system()命令,也就相当于windows下cmd命令,因此可以自行查找相关命令。




本例中,压缩包在第一级目录,lua脚本放在script文件夹中。


Lua,不使用模块,解压文件_第1张图片


Lua,不使用模块,解压文件_第2张图片




需求为:解压第一级目录的压缩包到脚本所在目录,然后读取解压出来的文件夹其中的xml文件内容数据,最后再把解压出来的整个文件夹删除。

--当前为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,windows,c++)