2011-01-11 8 views

Répondre

5

est ici l'extrait de code pour la fonction TouchFile:

[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

Salut, quand je [ 'étais looking'] (http://stackoverflow.com/a/10163139/960757) pour un' CreateFile' prototype pour InnoSetup, j'ai trouvé votre code et l'ai optimisé un peu. Notez également que ce code est pour la version ANSI d'InnoSetup. Si vous devez l'utiliser pour la version Unicode, vous devez définir l'importation de la fonction 'CreateFile' comme' CreateFileW' au lieu de 'CreateFileA' ou utiliser l'astuce suggérée par [' kobik'] (http://stackoverflow.com/users/ 937125/kobik) dans ce ['post'] (http://stackoverflow.com/a/9670505/960757). +1 pour partager les ides de toute façon ;-) – TLama

+0

Droit sur! Merci d'avoir ajouté le try-finally. Je l'ai modifié pour le support Unicode maintenant. – Ilya

+1

(Ne pas utiliser le truc de @ kobik mais ça va faire :) – Ilya

Questions connexes