Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-04-2012
Paco Fernandez Paco Fernandez is offline
Registrado
NULL
 
Registrado: abr 2012
Posts: 3
Poder: 0
Paco Fernandez Va por buen camino
Ayuda Comparacion.

Hola, bueno me ha surgido un problema, estoy intentando comparar 2 listbox me explico.

Cargo en 2 listbox el contenido de 2 carpetas
Si en 1 listbox tengo a paco.exe y perez.exe y en el segundo Listbox otro a paco.exe y juanjo.exe

Juanjo.exe es diferente a los otros y como es diferente a el primer textbox quiero que se borre el archivo.

Por el foro , lei una funcion que borraba el contenido de un directorio , era de "marcoszorrilla"
Pero en este caso quiero borrar archivos de un directorio que no sean iguales a otro directorio
a traves de 2 listbox, se como cargar y que se muestren , me faltaria esta parte.
no la entendi muy bien, y la comparacion iria por los operadores en este caso seria " a<>b " no? si estoy equivocado corriganme , pero no se como aplicarlo para borrar los archivos desiguales.

Gracias si pueden ayudarme me vendria muy bien
Responder Con Cita
  #2  
Antiguo 27-04-2012
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
No se si entendí bien Paco...

Puedes comenzar con un recorrido sobre la lista dos, donde están los archivos que potencialmente quieres borrar.
Tomas cada elemento y lo buscas en la lsita uno... puede ser con

Código Delphi [-]
resultado:= ListBox1.Items.IndexOf(NombreDelArchivo)

Si el resultado es -1 quiere decir que el archivo no ha sido encontrado y lo eliminas físicamente con

Código Delphi [-]
SysUtils.DeleteFile(RutaDelArchivo +  NombreDelArchivo);

¿Si entendí bien lo que querías?
Responder Con Cita
  #3  
Antiguo 27-04-2012
Paco Fernandez Paco Fernandez is offline
Registrado
NULL
 
Registrado: abr 2012
Posts: 3
Poder: 0
Paco Fernandez Va por buen camino
Mas o menos asi la ruta ya estaria indicada y de esa carpeta ya cargarian al list eso ya perfect

es algo asi lo que quiero parecido a lo que me has dicho mira, por ejemplo:
ListBox1.Items <> Listbox2.Items
Si son desiguales los elementos de una lista y otra, que se borren pero no de la lista si no los archivos asi en bruto.

Las carpetas que contienen los archivos, previamente fueron cargadas y marcadas en un edit, para no tener que meter la ruta en el code.

Si el nombre de un archivo de listbox1 no aparece en el listbox2 , que se borre el archivo de diferente nombre del listbox2 no se si me explico

Es hay mi gran duda

Última edición por Paco Fernandez fecha: 27-04-2012 a las 06:40:47.
Responder Con Cita
  #4  
Antiguo 27-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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
  #5  
Antiguo 28-04-2012
Paco Fernandez Paco Fernandez is offline
Registrado
NULL
 
Registrado: abr 2012
Posts: 3
Poder: 0
Paco Fernandez Va por buen camino
Una verdadera maravilla de codigo amigo, eres grande .

Mas que nada es como la opcion 2 , pero creo que pensando un poco podre aplicarlo pa la funcion 2

Tremendo codigo, muchas gracias sobre todo por comentarlo asi entiendo como funciona y me sirve bastante mas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda con una comparacion if danielmj Varios 11 21-02-2012 18:31:11
comparación de text lisc_dla Varios 2 02-08-2011 20:04:15
Ayuda para hacer un algoritmo de busqueda y comparacion JoAnCa Varios 7 23-12-2008 22:55:28
Ayuda comparacion campos AdoQuery Jaros SQL 4 27-05-2008 19:54:58
comparación de fechas Nelly Varios 2 27-10-2005 17:30:42


La franja horaria es GMT +2. Ahora son las 10:21:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi