版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u012896330/article/details/76522207
出於項目收藏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)