2011-12-09 2 views

Répondre

6

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.

+0

Merci beaucoup! – user1089764

7

Basé sur FileSetDate, vous pouvez écrire une routine similaire:

function FileSetCreatedDate(Handle: Integer; Age: Integer): Integer; 
var 
    LocalFileTime, FileTime: TFileTime; 
begin 
    Result := 0; 
    if DosDateTimeToFileTime(LongRec(Age).Hi, LongRec(Age).Lo, LocalFileTime) and 
    LocalFileTimeToFileTime(LocalFileTime, FileTime) and 
    SetFileTime(Handle, @FileTime, nil, nil) then Exit; 
    Result := GetLastError; 
end; 
+0

Yeahhhh !!!! Tu gères! Enfin quelque chose qui fonctionne! – user1089764

Questions connexes