Получение даты последнего изменения файла в Inno Setup Pascal Script
Мне нужно выбрать самый последний измененный файл в моем скрипте установки. Кажется, язык сценариев Паскаль не имеет GetFileDateTime
или подобное, поэтому я прибегаю к:
function FileDateTime (FileID : string) : double ;
var
FindRec : TFindRec;
begin
Result := 0.00 ;
if (FindFirst (FileID, FindRec)) then
begin
try
Result := FindRec.LastWriteTime ; { gives type mismatch, naturally }
finally
FindClose (FindRec) ;
end ;
end ;
end ;
но я не могу найти документацию по формату LastWriteTime
, В идеале я хочу, чтобы дата и время возвращались в формате, который позволит относительно легко отобразить его, так как мне нужно будет написать эквивалент Delphi's FormatDateTime
также. Инно Паскаль имеет GetDateTimeString
но это только форматирует текущее время, а не произвольное время.
2 ответа
Документация на TFindRec
запись в InnoSetup находится здесь. Он очень разреженный, но я почти уверен, что он имеет тот же формат, что и соответствующая структура в Windows API.
Действительно, InnoSetup's FindFirst
функция скорее всего соответствует FindFirstFile
Windows API. Таким образом TFindRec
запись соответствует WIN32_FIND_DATA
структура так, чтобы TFileTime
запись соответствует FILETIME
состав.
type
SYSTEMTIME = record
Year: WORD;
Month: WORD;
DayOfWeek: WORD;
Day: WORD;
Hour: WORD;
Minute: WORD;
Second: WORD;
Milliseconds: WORD;
end;
function FileTimeToSystemTime(
FileTime: TFileTime;
var SystemTime: SYSTEMTIME
): Boolean;
external 'FileTimeToSystemTime@kernel32.dll stdcall';
function GetModifiedFileDate(strFile : String) : Boolean;
var
FindRec: TFindRec;
SystemInfo: SYSTEMTIME;
begin
if FindFirst(strFile, FindRec) then begin
FileTimeToSystemTime( FindRec.LastWriteTime, SystemInfo);
end;
MsgBox(format('%4.4d-%2.2d-%2.2d', [SystemInfo.Year, SystemInfo.Month, SystemInfo.Day]), mbInformation, MB_OK);
end;