Fechas de un fichero (creación, modificación y últ. acceso)
sábado, 29 de marzo de 2008
2 comentarios
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,…