Datetime 获取Inno Setup Pascal脚本中文件的最后修改日期

Datetime 获取Inno Setup Pascal脚本中文件的最后修改日期,datetime,scripting,inno-setup,pascal,datestamp,Datetime,Scripting,Inno Setup,Pascal,Datestamp,我需要在安装脚本中选择最近修改的文件。Pascal脚本语言似乎没有GetFileDateTime或类似的功能,因此我求助于: 函数FileDateTime(FileID:string):双精度; 变量 FindRec:TFindRec; 开始 结果:=0.00; 如果是(FindFirst(FileID,FindRec)),则 开始 尝试 结果:=FindRec.LastWriteTime;{自然给出类型不匹配} 最后 FindClose(FindRec); 结束; 结束; 结束; 但是我找不

我需要在安装脚本中选择最近修改的文件。Pascal脚本语言似乎没有
GetFileDateTime
或类似的功能,因此我求助于:

函数FileDateTime(FileID:string):双精度;
变量
FindRec:TFindRec;
开始
结果:=0.00;
如果是(FindFirst(FileID,FindRec)),则
开始
尝试
结果:=FindRec.LastWriteTime;{自然给出类型不匹配}
最后
FindClose(FindRec);
结束;
结束;
结束;

但是我找不到任何关于
LastWriteTime
格式的文档。理想情况下,我希望以一种相对容易显示的格式返回datetime,因为我还需要编写Delphi的
FormatDateTime
的等价物。Inno Pascal有
GetDateTimeString
,但它只格式化当前日期时间,而不是任意日期时间。

InnoSetup中
TFindRec
记录上的文档是。它非常稀疏,但我几乎确信它的格式与Windows API中相应的结构完全相同


实际上,InnoSetup的
FindFirst
函数很可能与Windows API的。因此,
TFindRec
记录对应于结构,因此
TFileTime
记录对应于结构。

我不认为Pascal可以被描述为一种“脚本语言”@pavium-No,但作者选择这样做。在InnoSetup网页上:“InnoSetup 4引入了Pascal脚本功能。”事实上,如果它能够作为脚本语言重生,我会很高兴。我仍然在使用一种特殊形式的Pascal。这就是问题所在-没有两个版本的Pascal是相同的。@pavium:有不同的Pascal脚本实现,例如来自rem对象的,我认为这就是Jordan在Inno脚本中使用的(不确定)。我坚持更正。我想到了几十年前在HP300系列计算机上使用的“pascal”,现在在HP/Apollo工作站上仍然使用。所以关于帕斯卡死亡的报道被大大夸大了。那么答案是什么呢,因为有一种类型的比赛失误?你是如何匹配这些类型的?代码可以在:Nice找到。但是您能否修改
GetModifiedFileDate
,使其签名具有某种意义?它是一个返回布尔值的函数,但不返回任何内容。
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;