Estimados foristas.
Deseo recorrer una carpeta y sus subcarpetas buscando archivos que sean menores a 30 dias a la fecha
y si es asi, borrarlos. A su vez, si la carpeta queda vacia, tambien borrarla.
He tomado el siguiente codigo de varios posts pero no he logrado el objetivo. En algun punto creo
que queda en loop infinito o no me borra ni los archivos ni las carpetas.
Código Delphi
[-]
var
sRuta : string;
bIncluirSubdirectorios : Boolean;
function GetFileDateTime(Nombre: string): TDateTime;
var
Hnd: integer;
begin
Hnd := FileOpen(Nombre, 0);
try
Result:= FileDateToDateTime(FileGetDate(Hnd));
finally
FileClose(Hnd);
end;
end;
procedure RecorrerDirectorio( sRuta: String; bIncluirSubdirectorios: Boolean );
var
cDir, Directorio : TSearchRec;
iResultado : Integer;
dt: TDateTime;
begin
if sRuta[Length(sRuta)] <> '\' then
sRuta := sRuta + '\';
iResultado := FindFirst( sRuta + '*.*', FaAnyfile, Directorio );
while iResultado = 0 do
begin
if ( Directorio.Attr and faDirectory = faDirectory ) and bIncluirSubdirectorios then
begin
if ( Directorio.Name <> '.' ) and ( Directorio.Name <> '..' ) then
RecorrerDirectorio( sRuta + Directorio.Name, True );
end
else
begin
if ( Directorio.Attr and faVolumeId <> faVolumeID ) then
begin
dt := GetFileDateTime( sRuta + Directorio.Name);
if DaysBetween(dt, Now) > 30 then
DeleteFile( sRuta + Directorio.Name );
if FindFirst( Directorio.Name + '*.*', FaAnyfile, cDir ) = 0 then
RemoveDir( sRuta + Directorio.Name );
end;
end;
iResultado := FindNext( Directorio );
end;
SysUtils.FindClose( Directorio );
end;
begin
sRuta := 'T:\VIDEOS';
bIncluirSubdirectorios := True;
RecorrerDirectorio( sRuta, True );
end.
Agradezco mucho la ayuda prestada en resolver este "misterio" ( al menos para mi

).
Saludos
Leonardo