Fechas de un fichero (creación, modificación y últ. acceso)
Para cualquier fichero que se encuentra en el sistema de archivos de Windows se almacenan varias fechas. Para acceder a todas ellas puede utilizar el siguiente truco:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | // ================================================================ // Return the three dates (Created,Modified,Accessed) // of a given filename. Returns FALSE if file cannot // be found or permissions denied. Results are returned // in TdateTime VAR parameters // ================================================================ // ================================================================ // 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; var FileHandle : integer; Retvar : boolean; FTimeC,FTimeA,FTimeM : TFileTime; LTime : TFileTime; STime : TSystemTime; begin // Abrir el fichero FileHandle := FileOpen(FileName,fmShareDenyNone); // inicializar Created := 0.0; Modified := 0.0; Accessed := 0.0; // Ha tenido acceso al fichero? if FileHandle < 0 then RetVar := false else begin // Obtener las fechas RetVar := true; GetFileTime(FileHandle,@FTimeC,@FTimeA,@FTimeM); // Cerrar FileClose(FileHandle); // Creado FileTimeToLocalFileTime(FTimeC,LTime); if FileTimeToSystemTime(LTime,STime) then begin Created := EncodeDate(STime.wYear,STime.wMonth,STime.wDay); Created := Created + EncodeTime(STime.wHour,STime.wMinute, STime.wSecond, STime.wMilliSeconds); end; // Accedido FileTimeToLocalFileTime(FTimeA,LTime); if FileTimeToSystemTime(LTime,STime) then begin Accessed := EncodeDate(STime.wYear,STime.wMonth,STime.wDay); Accessed := Accessed + EncodeTime(STime.wHour,STime.wMinute, STime.wSecond, STime.wMilliSeconds); end; // Modificado FileTimeToLocalFileTime(FTimeM,LTime); if FileTimeToSystemTime(LTime,STime) then begin Modified := EncodeDate(STime.wYear,STime.wMonth,STime.wDay); Modified := Modified + EncodeTime(STime.wHour,STime.wMinute, STime.wSecond, STime.wMilliSeconds); end; end; Result := RetVar; end; |
Para llamar a ésta función se puede utilizar un código como éste:
1 2 3 4 5 6 7 8 9 10 | var CDate,MDate,ADate : TDateTime; begin // Correcto? if GetFileTimes('c:\autoexec.bat', CDate, MDate, ADate) then begin Label1.Caption := FormatDateTime('dd/mm/yyyy hh:nn',CDate); Label2.Caption := FormatDateTime('dd/mm/yyyy hh:nn',MDate); Label3.Caption := FormatDateTime('dd/mm/yyyy hh:nn',ADate); end; end; |
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Muchísimas gracias, German por este truco.
Lo vengo utilizando desde hace algun tiempo con excelentes resultados. Lo utilizo para controlar cual es la última fecha y hora de compilacion que se esta ejecutando. Dicha fecha y hora, las muesto en un rinconcito del formulario de inicio.
Ahora me veo en la encrucijada que empiezo a trabajar con FireMonkey para poder correr mis aplicaciones en Android.
La pregunta es: Conoces algun metodo equivalente que funcione corriendo en Android a través de FireMonkey?
Mil gracias de antemano.
@Pei
Hola Pei.
Lo siento pero no he probado algo similar en Android.