Leonardo,
Revisa este código el cual es una variante funcional del anterior:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DateUtils;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
procedure RecorrerDirectorio( sRuta: String; bIncluirSubdirectorios: Boolean );
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure RecorrerDirectorio( sRuta: String; bIncluirSubdirectorios: Boolean);
var
cDir, Directorio : TSearchRec; iResultado : Integer;
dt: TDateTime;
begin
sRuta := IncludeTrailingPathDelimiter(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
begin
RecorrerDirectorio(sRuta + Directorio.Name, True);
if FindFirst(sRuta + Directorio.Name + '\' + '*.*', FaArchive, cDir) <> 0 then
begin
RemoveDir(sRuta + Directorio.Name);
FindClose(cDir);
end
end
else
begin
iResultado := FindNext(Directorio);
continue;
end;
end;
if (Directorio.Attr and faArchive = faArchive) then
begin
dt := FileDateToDateTime(FileAge(sRuta + Directorio.Name));
if DaysBetween(dt, Now) > 30 then
DeleteFile( sRuta + Directorio.Name );
end;
iResultado := FindNext(Directorio);
end;
FindClose( Directorio );
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sRuta : String;
begin
sRuta := 'D:\xPrueba_De_Borrado';
RecorrerDirectorio(sRuta, True);
end;
end.
El código anterior fue probado en varios escenarios, con resultados favorables en todos los casos según el criterio establecido: Borrar los archivos mayores a 30 días y/o los directorios vacíos.
Nota: Por el código inicial asumí que lo correcto es el borrado de los archivos mayores a 30 días, no menores a 30 días como dice el enunciado del problema, en cualquier caso se puede cambiar si es necesario sin afectar el código.
Espero sea útil
Nelson.