2011-04-26 179 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

相關問題