Получение даты создания PE-файлов (*.EXE, *.DLL и др.)

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

arclite — работа с архивами на основе 7-Zip

Post by John Doe »

Latest post of the previous page:

2useven10 wrote: Wed 17 May, 2023 15:02 Мне вообще непонятно зачем такие заморочки.
Проблема в том, что изначальная дата файла может быть потеряна по ряду причин. Например файлы скачиваемые браузером в Downloads.
https://t.me/FarManager — Telegram чат
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Получение даты создания PE-файлов (*.EXE, *.DLL и др.)

Post by SUSim »

Всем СПАСИБО :)

Короче, я сам сделал поиск PE заголовка, выдирание из него DataStamp и перевод в FileTime.
На выходных обновлю Пакет...
Last edited by SUSim on Fri 19 May, 2023 10:50, edited 1 time in total.
SimSU ··· ·· -- ··· ··-
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

Получение даты создания PE-файлов (*.EXE, *.DLL и др.)

Post by SUSim »

Обновил viewtopic.php?t=7075, а это из нового "Shell_FileTimeEx.lua"
Last edited by HaRT on Fri 19 May, 2023 20:00, edited 4 times in total.
Reason: Добавлено форматирование кода, поименован [spoiler].
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Получение даты создания PE-файлов (*.EXE, *.DLL и др.)

Post by John Doe »

1000 не должно быть константой.
Возможно стоит предусмотреть возможность передачи параметром.
  • Учитывая возможности изменить с помощью far.FileTimeResolution разрешающую способность ряда функций апи плагинов, иногда требуется вычислять так:

    Code: Select all

    local resolution = far.FileTimeResolution()==1 and 1000 or bit64.new(10000000)
  • В случае же если значение предполагается использовать в контексте win.Get/SetFileTimes, требуется bit64.new(10000000) независимо от режима far.FileTimeResolution.
Документация:
hh mk:@MSITStore:%FARHOME%\Encyclopedia\luafar_manual.chm::/544.html
Обсуждение: viewtopic.php?p=174178#p174178
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Получение даты создания PE-файлов (*.EXE, *.DLL и др.)

Post by John Doe »

John Doe wrote: Fri 19 May, 2023 21:13 1000 не должно быть константой.
Если мне например понадобится ваша функция, и я захочу сделать её в общем виде, то я просто уберу из неё конвертацию - пусть возвращает unixtime.
Это ведь тоже может быть полезно, например для вывода на экран: os.date(nil,unixtime).

Если далее мне понадобиться функция UnixToFileTime, то её можно в самом общем виде записать так:

Code: Select all

local EPOCH_DIFF = 11644473600 --number of seconds from 1 Jan. 1601 00:00 to 1 Jan 1970 00:00 UTC
local function UnixToFileTime (unixtime, lowres)
  local resolution = lowres and 1000 or bit64.new(10000000)
  return (unixtime + EPOCH_DIFF) * resolution
end
Тут lowres опциональный параметр, для win.Get/SetFileTimes например не нужный.
А для функций Far API можно вызывать например так:

Code: Select all

local filetime = UnixToFileTime(unixtime, far.FileTimeResolution()==1)
Ну и (для полноты) можно предложить обратную функцию FileToUnixTime.lua:

Code: Select all

local function FileToUnixTime (filetime, lowres)
  local resolution = lowres and 1000 or 10000000
  return filetime / resolution - EPOCH_DIFF
end
https://t.me/FarManager — Telegram чат
Post Reply

Return to “Обсуждение макросов”