2011-04-26 187 views
1

我需要在我的安装脚本中选择最近修改的文件。看来帕斯卡尔脚本语言没有GetFileDateTime或类似的,所以我诉诸:获取Inno Setup文件的最后修改日期Pascal脚本

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,但这只能格式化当前的日期时间,而不是任意的日期时间。

+0

我不认为帕斯卡尔可以被描述为“脚本语言” – pavium 2011-04-26 23:42:25

+0

@pavium - 没有,但笔者选择。来自InnoSetup网页:“Inno Setup 4引入了Pascal脚本功能。” – rossmcm 2011-04-27 00:13:48

+0

实际上,如果它可以作为脚本语言重生,我会很高兴。我仍然在使用Pascal的特殊形式。这是关于它的事情 - 没有两个版本的Pascal是相同的。 – pavium 2011-04-27 02:00:34

回答

2

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

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

+0

谢谢。我错过了。 – rossmcm 2011-04-27 00:28:04

+0

那么答案是什么,因为有类型错过匹配?你是如何匹配这些类型的? – none 2012-02-14 09:54:44

+0

代码可以在:http://stackoverflow.com/questions/749954/get-a-files-last-updated-time-using-pascal-innosetup/1065605#1065605 – none 2012-02-14 10:22:32

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 '[email protected] 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; 
+0

不错。但是你可以修改'GetModifiedFileDate',以便它的签名有意义吗?这是一个返回'Boolean'的函数,但它不返回任何东西。 – 2016-12-07 06:41:30

相关问题