Lua 執行命令行獲取文件MD5值

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 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)   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章