Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Modificar las fechas de creación y modifiación de un archivo (https://www.clubdelphi.com/foros/showthread.php?t=74473)

lduron 22-06-2011 04:50:18

Modificar las fechas de creación y modifiación de un archivo
 
Hola amigos!

Me podrían ayudar con este código?

El objetivo es que debe de cambiar la fecha de creación y la fecha de modificación de un archivo cualquiera.

Este código solo me cambia la fecha de modificación, pero la fecha de creación no... como lo puedo resolver?

Código Delphi [-]
function SetDateToFile(const FileName: string; Value: TDateTime): Boolean;
var
  hFile: THandle;
begin
  Result := False;
  try
    hFile := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
//    hFile := FileOpen(FileName, fmOpenReadWrite or fmShareDenyWrite);
    if (hFile > 0) then
      Result := (FileSetDate(hFile, DateTimeToFileDate(Value)) = 0)
  finally
    FileClose(hFile);
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
SetDateToFile('C:\CambiarFecha\prueba.txt', StrToDateTime('06/07/2011 15:30:11'));
end;

Gracias de antemano.

Saludos!

Caral 22-06-2011 05:16:00

Hola
Aqui hay un ejemplo
Saludos

Chris 22-06-2011 17:39:02

Hola!

Utiliza la función SetFileTime de la API de windows para lograr lo que necesitas.

Saludos,
Chris

lduron 22-06-2011 20:04:37

Hola Caral & Chris!

Muchas gracias por responder.

Caral el código que me pusiste solo es para cambiar la fecha de modificación del archivo. Como puedo cambiar la fecha de creación y la fecha de Acceso?

Chris soy novato en esto, me puedes echar la mano con un ejemplo?

Nuevamente les agradesco a ambos su ayuda.

Saludos!

Chris 22-06-2011 22:05:33

Cita:

Empezado por lduron (Mensaje 404518)
Chris soy novato en esto, me puedes echar la mano con un ejemplo?

Puedes probar a utilizar esta función que he encontrado por ahí:
Código Delphi [-]
function NT_SetDateTime(FileName: string; dtCreation, dtLastAccessTime, dtLastWriteTime: TDateTime): Boolean;
// by Nicholas Robinson
var
  hDir: THandle;
  ftCreation: TFiletime;
  ftLastAccessTime: TFiletime;
  ftLastWriteTime: TFiletime;

  function DTtoFT(dt: TDateTime): TFiletime;
  var
    dwft: DWORD;
    ft: TFiletime;
  begin
    dwft := DateTimeToFileDate(dt);
    DosDateTimeToFileTime(LongRec(dwft).Hi, LongRec(dwft).Lo, ft);
    LocalFileTimeToFileTime(ft, Result);
  end;

begin
  hDir := CreateFile(PChar(FileName),
                     GENERIC_READ or GENERIC_WRITE,
                     0,
                     nil,
                     OPEN_EXISTING,
                     FILE_FLAG_BACKUP_SEMANTICS,
                     0);
  if hDir <> INVALID_HANDLE_VALUE then 
  begin
    try
      ftCreation       := DTtoFT(dtCreation);
      ftLastAccessTime := DTtoFT(dtLastAccessTime);
      ftLastWriteTime  := DTtoFT(dtLastWriteTime);
      Result := SetFileTime(hDir, @ftCreation, @ftLastAccessTime, @ftLastWriteTime);
    finally
      CloseHandle(hDir);
    end;
  end
  else
    Result := False;
end;
Fuente original: Torry Delphi Pages.

Una vez escribí yo mismo una rutina para hacer lo que buscas. Lamentablemente creo que la he perdido. Por eso, mejor tomo el atrevimiento de proporcionarte un código escrito por Nicholas Robinson que acabo de encontrar en la red.

Saludos,
Chris

lduron 06-07-2011 02:13:19

http://www.clubdelphi.com/foros/imag...ine=1201024417Chris
http://www.clubdelphi.com/foros/imag...ine=1201024417Chris
Chris muchas gracias, funcionó a la perfección (100%).

Nuevamente muchas gracias por tú ayuda. Y a todos los que se tomaron un tiempo para leer y aportar sus conocimentos con esta pregunta.

Saludos!


La franja horaria es GMT +2. Ahora son las 13:24:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi