Datetime 获取Inno Setup Pascal脚本中文件的最后修改日期
我需要在安装脚本中选择最近修改的文件。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); 结束; 结束; 结束; 但是我找不
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;