2011-01-11 16 views

Antwort

5

Hier ist der Code-Schnipsel für die TouchFile Funktion:

[Code] 
function CreateFile(
    lpFileName    : String; 
    dwDesiredAccess  : Cardinal; 
    dwShareMode   : Cardinal; 
    lpSecurityAttributes : Cardinal; 
    dwCreationDisposition : Cardinal; 
    dwFlagsAndAttributes : Cardinal; 
    hTemplateFile   : Integer 
): THandle; 
#ifdef UNICODE 
external '[email protected] stdcall'; 
#else 
external '[email protected] stdcall'; 
#endif 

procedure GetSystemTimeAsFileTime(var lpSystemTimeAsFileTime: TFileTime); 
external '[email protected]'; 

function SetFileModifyTime(hFile:THandle; CreationTimeNil:Cardinal; LastAccessTimeNil:Cardinal; LastWriteTime:TFileTime): BOOL; 
external '[email protected]'; 

function CloseHandle(hHandle: THandle): BOOL; 
external '[email protected] stdcall'; 

function TouchFile(FileName: String): Boolean; 
const 
    { Win32 constants } 
    GENERIC_WRITE  = $40000000; 
    OPEN_EXISTING  = 3; 
    INVALID_HANDLE_VALUE = -1; 
var 
    FileTime: TFileTime; 
    FileHandle: THandle; 
begin 
    Result := False; 
    FileHandle := CreateFile(FileName, GENERIC_WRITE, 0, 0, OPEN_EXISTING, $80, 0); 
    if FileHandle <> INVALID_HANDLE_VALUE then 
    try 
    GetSystemTimeAsFileTime(FileTime); 
    Result := SetFileModifyTime(FileHandle, 0, 0, FileTime); 
    finally 
    CloseHandle(FileHandle); 
    end;  
end; 
+0

Hallo, wenn ich [ 'war looking'] (http://stackoverflow.com/a/10163139/960757) für eine' CreateFile' Prototyp für InnoSetup, ich habe deinen Code gefunden und ein wenig optimiert. Beachten Sie außerdem, dass dieser Code für die ANSI-Version von InnoSetup verwendet wird. Wenn Sie dies für die Unicode-Version benötigen, sollten Sie den 'CreateFile'-Funktionsimport als 'CreateFileW' anstelle von' CreateFileA' definieren oder den von ['kobik'] vorgeschlagenen Trick verwenden (http://stackoverflow.com/users/ 937125/kobik) in diesem ['post'] (http://stackoverflow.com/a/9670505/960757). +1 für die Freigabe der IDs ;-) – TLama

+0

Direkt dran! Danke, dass du den try-finally hinzugefügt hast. Ich habe es jetzt für die Unicode-Unterstützung geändert. – Ilya

+1

(Nicht mit @ Kobiks Trick, aber es geht :) – Ilya

Verwandte Themen