Получение даты последнего изменения файла в Inno Setup Pascal Script - PullRequest
1 голос
/ 27 апреля 2011

Мне нужно выбрать самый последний измененный файл в моем скрипте установки. Кажется, что язык сценариев Паскаля не имеет 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 FormatDateTime. Inno Pascal имеет GetDateTimeString, но форматирует только текущую дату и время, а не произвольную дату.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Документация по записи TFindRec в InnoSetup: здесь .Это очень разреженный, но я почти уверен, что он имеет тот же формат, что и соответствующая структура в Windows API.

Действительно, функция FindFirst InnoSetup, скорее всего, соответствует FindFirstFile Windows API.Таким образом, запись TFindRec соответствует структуре WIN32_FIND_DATA, так что запись TFileTime соответствует структуре FILETIME.

0 голосов
/ 07 декабря 2016
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;
...