1

我需要在我的安装脚本中选择最近修改的文件。似乎 Pascal 脚本语言没有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,但这仅格式化当前日期时间,而不是任意日期时间。

4

2 回答 2

2

TFindRecInnoSetup 中记录的文档在此处。它非常稀疏,但我几乎确信它与 Windows API 中的相应结构具有完全相同的格式。

事实上,InnoSetup 的FindFirst函数很可能对应于FindFirstFileWindows API。因此,TFindRec记录对应于WIN32_FIND_DATA结构,使得TFileTime记录对应于FILETIME结构。

于 2011-04-27T00:16:15.830 回答
0
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;
于 2016-12-07T05:59:53.607 回答