chiamare la funzione API di Windows SetFileTime
. Passa a nil
per lpLastAccessTime
e a lpLastWriteTime
se desideri solo modificare il tempo di creazione.
È necessario ottenere un handle di file chiamando lo CreateFile
o uno dei wrapper Delphi, quindi questa non è l'API più conveniente da utilizzare.
Renditi la vita più semplice avvolgendo l'API call in una funzione helper che riceve il nome file e un TDateTime
. Questa funzione dovrebbe gestire i dettagli di basso livello per ottenere e chiudere un handle di file e convertire lo TDateTime
in uno FILETIME
.
lo farei in questo modo:
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;
ho dovuto aggiungere la dichiarazione di FILE_WRITE_ATTRIBUTES
perché non è presente nell'unità Delphi 6 di Windows.
fonte
2011-12-09 13:44:10
Grazie mille !!!! – user1089764