Ver Mensaje Individual
  #4  
Antiguo 27-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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:
  1. Borrar de la carpeta A todos los archivos que no esten en la carpeta B.
  2. Borrar de la carpeta B todos los archivos que no esten en la carpeta A.
  3. 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 [-]
(* Cargar archivos al TStrings pasado en TSFiles *)
procedure AddFiles(ADir: string; TSFiles: TStrings);
var
  SR: TSearchRec;
begin
  TSFiles.Clear;
  ADir:= IncludeTrailingPathDelimiter(ADir); // Incluir backslash
  // Busqueda
  if FindFirst(ADir + '*.*', faArchive, SR)= 0 then
  repeat
    TSFiles.Add(Adir + SR.Name); // Añadir
  until FindNext(SR) <> 0;
end;

(* Borrar archivos de Dir1 que no esten en Dir2 y de Dir2 que no esten en Dir1 *)
procedure DeleteDistinctFiles(Dir1, Dir2: string);
var
  TS1, // almacena archivos de Dir1
  TS2, // almacena archivos de Dir2
  ToDelete: TStrings; // almacena archivos a borrar
  i,j: Integer;
  Equal: Boolean;
begin
  TS1:= TStringList.Create;
  TS2:= TStringList.Create;
  ToDelete:= TStringList.Create;
  try
    // Cargar archivos Dir1 y Dir2
    AddFiles(Dir1, TS1);
    AddFiles(Dir2, TS2);
    // Encontrar archivos de Dir1 que no estan en Dir2
    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]); // agregarlo para borrar
    end;
    // Encontrar archivos de Dir2 que no estan en Dir1
    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]); // agregarlo para borrar
    end;
    // Borrar archivos seleccionados
    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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita