2
Comment puis-je "toucher" un fichier, c'est-à-dire mettre à jour son 'dernier temps modifié' à partir d'un script InnoSetup (Pascal)?Comment "toucher" un fichier depuis un script InnoSetup?
Comment puis-je "toucher" un fichier, c'est-à-dire mettre à jour son 'dernier temps modifié' à partir d'un script InnoSetup (Pascal)?Comment "toucher" un fichier depuis un script InnoSetup?
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;
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
Droit sur! Merci d'avoir ajouté le try-finally. Je l'ai modifié pour le support Unicode maintenant. – Ilya
(Ne pas utiliser le truc de @ kobik mais ça va faire :) – Ilya