Llame a la función API de Windows SetFileTime
. Pase nil
para lpLastAccessTime
y lpLastWriteTime
si solo desea modificar la hora de creación.
Necesitará obtener un identificador de archivo llamando al CreateFile
, o uno de los envoltorios de Delphi, por lo que esta no es la API más conveniente de usar.
Haga la vida más fácil al envolver la llamada API en una función de ayuda que recibe el nombre de archivo y TDateTime
. Esta función debe gestionar los detalles de bajo nivel para obtener y cerrar un identificador de archivo y convertir el TDateTime
en un FILETIME
.
lo haría así:
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;
he tenido que añadir la declaración de FILE_WRITE_ATTRIBUTES
porque no está presente en la unidad de Delphi 6 de Windows.
¡Muchas gracias! – user1089764