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; |