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 のものと同等のものも作成する必要があるため、比較的簡単に表示できる形式で datetime を返したいと考えてい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 に答える