Как известно, раньше было принято в PE-заголовок .exe и .dll помещать дату сборки.
Используя эту информацию можно восстановить изначальное время файла.
Для потрошения PE-заголовка используем pefile.
PE_TimeDateStamp.py
Code: Select all
import sys
import pefile
filename = sys.argv[1]
pe = pefile.PE(filename)
pe_timedate = pe.FILE_HEADER.TimeDateStamp #unixtime
print(pe_timedate)
PE_TimeDateStamp.lua
Code: Select all
local filename = far.ConvertPath((...))
local py = assert(io.popen("PE_TimeDateStamp.py "..filename))
local pe_unixtime = assert(tonumber(py:read(),10))
py:close()
print(os.date(nil,pe_unixtime))
local EPOCH_DIFF = 11644473600 --number of seconds from 1 Jan. 1601 00:00 to 1 Jan 1970 00:00 UTC
local resolution = bit64.new(10000000)
local pe_timedate = (pe_unixtime + EPOCH_DIFF) * resolution
print(pe_timedate)
assert(win.SetFileTimes(filename,{LastWriteTime=pe_timedate}))