Lua 执行命令行获取文件MD5值
Posted 一如年少模样
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua 执行命令行获取文件MD5值相关的知识,希望对你有一定的参考价值。
出于项目收藏gif图片需求的查重问题,不得不找出gif图片的唯一性, 由于保存的图片名称是根据时间戳命名的,所以两张相同的图片发送再执行收藏功能时所获取到的图片名 ***.gif是不同的,没有可比性。 md5值是可以的。
看了下资料,在Lua中
os.execute可以执行dos命令,但是返回的是系统状态码,默认输出
io.popen()也可以执行dos命令,但是返回一个文件。eg:
local t = io.popen('svn help')
local a = t:read("*all")
--a返回一个字符串,内容是svn help的内容
如果想执行某命令或程序可选os.execute(),如果还想捕捉该执行结果可用io.popen()
eg:复制文件
os.execute("copy" .. originalPath .. "," .. backupPath)
那么接下来就看下windows下命令行查看文件md5
certutil -hashfile yourfilename.ext MD5
certutil -hashfile yourfilename.ext SHA1
certutil -hashfile yourfilename.ext SHA256
这样返回值是分行的,如下图所示:
因为我们就只想得到第二行的返回的md5值来作为是否收藏的依据,逐行获取我们所需要的,入库,遍历查询即可
方法如下:
--运行DOS命令,查找文件md5
*--------------------
fpath 为文件的绝对路径
-----------------------
function getFileMd5( fpath)
local cmd = "certutil -hashfile "..fpath.." MD5"
local t = io.popen(cmd)
local i = 0
local str_md5
for line in t:lines() do
--print("line"..line) -- 这里就是每次取一行
i = i+1
if i == 2 then
str_md5 = line
end
end
return str_md5
end
--获取到文件的md5
local str = getFileMd5(tmpPath)
以上是关于Lua 执行命令行获取文件MD5值的主要内容,如果未能解决你的问题,请参考以下文章