Appelez la fonction Windows API SetFileTime
. Passez nil
pour lpLastAccessTime
et lpLastWriteTime
si vous souhaitez uniquement modifier l'heure de création.
Vous aurez besoin d'obtenir un handle de fichier en appelant CreateFile
, ou l'un des wrappers Delphi, ce n'est donc pas l'API la plus pratique à utiliser.
Facilitez-vous la vie en enveloppant l'appel API dans une fonction d'assistance qui reçoit le nom de fichier et un TDateTime
. Cette fonction doit gérer les détails de bas niveau d'obtention et de fermeture d'un descripteur de fichier, et la conversion du TDateTime
en FILETIME
.
je le ferais comme ceci:
const
FILE_WRITE_ATTRIBUTES = $0100;
procedure SetFileCreationTime(const FileName: string; const DateTime: TDateTime);
var
Handle: THandle;
SystemTime: TSystemTime;
FileTime: TFileTime;
begin
Handle := CreateFile(PChar(FileName), FILE_WRITE_ATTRIBUTES,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if Handle=INVALID_HANDLE_VALUE then
RaiseLastOSError;
try
DateTimeToSystemTime(DateTime, SystemTime);
if not SystemTimeToFileTime(SystemTime, FileTime) then
RaiseLastOSError;
if not SetFileTime(Handle, @FileTime, nil, nil) then
RaiseLastOSError;
finally
CloseHandle(Handle);
end;
end;
je devais ajouter la déclaration de FILE_WRITE_ATTRIBUTES
parce qu'il est pas présent dans Delphi 6 unité de Windows.
Merci beaucoup! – user1089764