Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Fecha de modificación de Ejecutable (https://www.clubdelphi.com/foros/showthread.php?t=95597)

ArtPortEsp 03-03-2022 00:08:13

Fecha de modificación de Ejecutable
 
Encontré este código para obtener la fecha de modificación de un archivo:

Código:

function GetFileDate(TheFileName: string): Double;
var
    FHandle: integer;
begin
    FHandle := FileOpen(TheFileName, 0);
    try
          Result := FileDateToDateTime(FileGetDate(FHandle));
    finally
          FileClose(FHandle);
    end;
end;

Sin embargo no funciona si se trata de obtener la fecha del EXE que se esta ejecutando, (FILEAGE funciona*, pero no funciona si se trata de obtener la fecha de un archivo en una RED local);

Que me pueden sugerir para obtener esa fecha sin importar si es el ejecutable que uso o alguno en la red?

Gracias

ArtPortEsp 03-03-2022 00:39:41

Cita:

Empezado por ArtPortEsp (Mensaje 545767)
Encontré este código para obtener la fecha de modificación de un archivo:

Código:

function GetFileDate(TheFileName: string): Double;
var
    FHandle: integer;
begin
    FHandle := FileOpen(TheFileName, 0);
    try
          Result := FileDateToDateTime(FileGetDate(FHandle));
    finally
          FileClose(FHandle);
    end;
end;

Sin embargo no funciona si se trata de obtener la fecha del EXE que se esta ejecutando, (FILEAGE funciona*, pero no funciona si se trata de obtener la fecha de un archivo en una RED local);

Que me pueden sugerir para obtener esa fecha sin importar si es el ejecutable que uso o alguno en la red?

Gracias

Olvide mencionar que uso D7

egostar 03-03-2022 01:25:52

Cita:

Empezado por ArtPortEsp (Mensaje 545769)
Olvide mencionar que uso D7

A ver si esto te sirve

Fecha Modificación de Fichero

En el mensaje 11 específicamente.

Saludos

Neftali [Germán.Estévez] 03-03-2022 12:11:25

Aquí en la sección de trucos del club, tienes uno específicamente para eso:

Obtener las fechas de un fichero (creación, modificación y último acceso)

Código Delphi [-]
// ================================================================
// Devuelve las tres fechas (Creación, modificación y último acceso)
// de un fichero que se pasa como parámetro.
// Devuelve FALSO si el fichero no se ha podido acceder, sea porque
// no existe o porque no se tienen permisos. Las fechas se devuelven
// en tres parámetros de ipo DateTime
// ================================================================
function GetFileTimes(FileName : string;
 var Created : TDateTime;
 var Modified : TDateTime;
 var Accessed : TDateTime) : boolean;

Neftali [Germán.Estévez] 03-03-2022 12:12:41

Y aquí hay una variante de David, que me gusta bastante también:

https://www.clubdelphi.com/foros/sho...40&postcount=2

escafandra 03-03-2022 12:37:23

El problema de acceder a la fecha de un fichero de un ejecutable que se está ejecutando, es el mismo que de qualquier archivo abierto edn modo no compartido. No se puede usar ningun código que trarte de abrirlo porque eso no será posible. La solución el cambiar de camino, como apuntaba [egostar] aquí.

Estas dos opciones pueden servir:
Con FindFirst:
Código Delphi [-]
function GetFileModifyDate(FileName: string): TDateTime;
var
  SearchRec: TSearchRec;
begin  
  if FindFirst(Filename,faAnyFile,SearchRec) = 0 then
    Result:= FileDateToDateTime(SearchRec.Time)
  else
    Result:= 0;
  FindClose(SearchRec);
end;

Con GetFileAttributesEx:
Código Delphi [-]
function GetModifyFileDate(FileName: String): TDate;
var
  FileData:  WIN32_FILE_ATTRIBUTE_DATA;
  SystemTime: TSYSTEMTIME;
begin
  GetFileAttributesEx(PCHAR(FileName), GetFileExInfoStandard, @FileData);
  FileTimeToSystemTime(FileData.ftLastWriteTime, SystemTime);
  Result:= EncodeDate(SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay);
end;

Saludos.

ArtPortEsp 03-03-2022 16:42:16

Muchas gracias por su ayuda amigos; todas son excelente opciones.

Probé este código que referenció NEFTALI:
Código:

function TUtilesArchivos.FechasArchivo(
 archivo: string; tipoFecha: TFechasArchivo): string;
var
  SR: TSearchRec;
  sysTime: SYSTEMTIME;
  fileTime: TFILETIME;
begin
  if (FindFirst(archivo, faAnyFile, SR) = 0) then begin
    case tipoFecha of
      faCreacion: FileTimeToLocalFileTime(SR.FindData.ftCreationTime, fileTime);
      faModificacion: FileTimeToLocalFileTime(SR.FindData.ftLastWriteTime, fileTime);
      faUltimoAcceso: FileTimeToLocalFileTime(SR.FindData.ftLastAccessTime, fileTime);
    else
      FileTimeToLocalFileTime(SR.FindData.ftCreationTime, fileTime);
    end;
    FileTimeToSystemTime(fileTime, sysTime);
    result := DateTimeToStr(SystemTimeToDateTime(sysTime));
    FindClose(SR);
  end
  else
    result := EmptyStr;
end;

y me quede con la segunda opción de escafandra (por alguna razón funciono notablemente mas rápido).

Nuevamente, muchas gracias.


La franja horaria es GMT +2. Ahora son las 02:03:08.

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