PDA

Ver la Versión Completa : Fecha de Archivo


vtdeleon
11-03-2005, 03:47:49
Saludos

Como puedo saber la fecha y/o hora de creacion o modificacion de un archivo cualquiera ?

Neftali [Germán.Estévez]
11-03-2005, 09:20:54
Aquí tienes una funcioncilla que te devuelve las fechas de un archivos tal i como se ven en las propiedades (Creación, última modificación y último acceso). Está basada en un Tip que encontré por Internet (Chami.com concretamente) y modificada para que devuelve las tres posibilidades, segun un parámetro que le pasas.


//------------------------------------------------------------------------------
function GetFileLastAccessTime(sFileName:string;
Date:Integer
{0=creation;
1=Ultima escritura
2=Ultimo Acceso} ):TDateTime;
var
ffd : TWin32FindData;
dft : DWord;
lft : TFileTime;
h : THandle;
begin
// Buscamos la información (fichero)
h := Windows.FindFirstFile(PChar(sFileName), ffd);
// Encontrado?
if(INVALID_HANDLE_VALUE <> h)then begin
// Sólo buscamos uno, por lo tantocerramos la búsqueda
Windows.FindClose( h );
// segun el tipo de fecha
if (Date = 0) then begin
FileTimeToLocalFileTime(ffd.ftCreationTime, lft);
end
else if (Date = 1) then begin
FileTimeToLocalFileTime(ffd.ftLastWriteTime, lft);
end
else if (Date = 2) then begin
FileTimeToLocalFileTime(ffd.ftLastAccessTime, lft);
end
else begin
// Tipo Incorrecto
Exit;
end;

// Lo convierte a DOS-Time
FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
// finalmente lo vuelve a convertir al tipo Delphi (TDateTime)
Result := FileDateToDateTime(dft);
end;
end;
//------------------------------------------------------------------------------


Para utilizarla basta un código como éste:


Str := 'c:\Temp\MSG_File.log';
Str := DateTimeToStr(GetFileLastAccessTime(Str, 0));
Memo1.Lines.Add('Creacion: ' + Str);
Memo1.Lines.Add('------------------------');
Str := 'c:\Temp\MSG_File.log';
Str := DateTimeToStr(GetFileLastAccessTime(Str, 1));
Memo1.Lines.Add('Última escritura: ' + Str);
Memo1.Lines.Add('------------------------');
Str := 'c:\Temp\MSG_File.log';
Str := DateTimeToStr(GetFileLastAccessTime(Str, 2));
Memo1.Lines.Add('Último Acceso: ' + Str);
Memo1.Lines.Add('------------------------');


Delphi posee en la Unit SysUtils la función FileAge, que utiliza ftLastWriteTime (que supongo que es el más utilizado), de forma que es una variante más concreta de ésta.