Hola Paco Fernandez.
Si deseas que se borren los archivos de determinadas carpetas sin mediar intervención del usuario, no hay necesidad de usar ListBox, digamos que los únicos componentes visuales requeridos son dos
TEdit para ingresar las rutas a las carpetas.
Lo que no especificaste y no tengo en claro, es si queres:
- Borrar de la carpeta A todos los archivos que no esten en la carpeta B.
- Borrar de la carpeta B todos los archivos que no esten en la carpeta A.
- Borrar de la carpeta A y de la carpeta B los archivos que no están en ambas carpetas.
Por lo que voy directo al tercer caso ya que contempla los dos anteriores. Una forma podría ser:
Código Delphi
[-]
procedure AddFiles(ADir: string; TSFiles: TStrings);
var
SR: TSearchRec;
begin
TSFiles.Clear;
ADir:= IncludeTrailingPathDelimiter(ADir); if FindFirst(ADir + '*.*', faArchive, SR)= 0 then
repeat
TSFiles.Add(Adir + SR.Name); until FindNext(SR) <> 0;
end;
procedure DeleteDistinctFiles(Dir1, Dir2: string);
var
TS1, TS2, ToDelete: TStrings; i,j: Integer;
Equal: Boolean;
begin
TS1:= TStringList.Create;
TS2:= TStringList.Create;
ToDelete:= TStringList.Create;
try
AddFiles(Dir1, TS1);
AddFiles(Dir2, TS2);
for i:= 0 to TS1.Count-1 do
begin
Equal:= False;
for j:= 0 to TS2.Count-1 do
if ExtractFileName(TS1[i]) = ExtractFileName(TS2[j]) then
Equal:= True;
if not Equal then ToDelete.Add(TS1[i]); end;
for i:= 0 to TS2.Count-1 do
begin
Equal:= False;
for j:= 0 to TS1.Count-1 do
if ExtractFileName(TS2[i]) = ExtractFileName(TS1[j])then
Equal:= True;
if not Equal then ToDelete.Add(TS2[i]); end;
for i:= 0 to ToDelete.Count-1 do
DeleteFile(ToDelete[i]);
finally
TS1.Free;
TS2.Free;
ToDelete.Free;
end;
end;
Llamada ejemplo:
Código Delphi
[-]
DeleteDistinctFiles(Edit1.Text, Edit2.Text);
Saludos.