Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-07-2014
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 225
Poder: 14
darkamerico Va por buen camino
Smile Aplicacion de Busqueda Recursiva de Archivos en Disco

Saludos comunidad de amigos, la situación que me embarga ahora es la siguiente: Tengo Varios Discos USB de 1 Tb donde tengo todos mis instaladores y video tutoriales entre otras cosas, y deseo hacer un software autoplay que me permita ingresar un nombre (puede ser el de un archivo directamente o el de una carpeta) y me permita listar las coincidencias en un componente que permita ejecutar el archivo ( o llamar al programa asociado) al darle doble click.

Muchas gracias por su atención.

Atte

Americo Torres
Responder Con Cita
  #2  
Antiguo 20-07-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, mira esto
Responder Con Cita
  #3  
Antiguo 20-07-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Yo que tu le echaba un ojo a este componente: TFindFile

Saludos.
Responder Con Cita
  #4  
Antiguo 21-07-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo que en este truco tienes el código que necesitas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 22-07-2014
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 225
Poder: 14
darkamerico Va por buen camino
Question Saludos

Gracias a todos aquellos amigos que respondieron, he probado cada código, ciertamente resuelven parte del problema, sin embargo, el problema en ellos es que buscan "mascaras", de la forma: *.pas, Arch.*, etc. por eso si existe un archivo llamado por ejemplo: INS_PHOTOSHOP_CC_14.EXE, no podre ubicarlo ingresando la palabra PHOTOSHOP, porque el archivo no comienza con dicha palabra.

El código que presento a continuación es la versión de Neftalí, pero presenta esta limitación:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, FindFile, StdCtrls;

type
  TForm1 = class(TForm)
    Buscar: TButton;
    lstArchivos: TListBox;
    Label1: TLabel;
    txtBuscar: TEdit;
    procedure BuscarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure FindFiles(StartDir, FileMask: string; recursively: boolean; var FilesList: TStringList);
  const
    MASK_ALL_FILES = '*.*';
    CHAR_POINT = '.';
  var
    SR: TSearchRec;
    DirList: TStringList;
    IsFound: Boolean;
    i: integer;
  begin
    if (StartDir[length(StartDir)] <> '\') then begin
      StartDir := StartDir + '\';
    end;

    // Crear la lista de ficheos en el directorio StartDir (no directorios!)
    IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
    // MIentras encuentre
    while IsFound do  begin
      FilesList.Add(StartDir + SR.Name);
      IsFound := FindNext(SR) = 0;
    end;

    FindClose(SR);

    // Recursivo?
    if (recursively) then begin
      // Build a list of subdirectories
      DirList := TStringList.Create;
      // proteccion
      try
        IsFound := FindFirst(StartDir + MASK_ALL_FILES, faAnyFile, SR) = 0;
        while IsFound do
        begin
          if ((SR.Attr and faDirectory) <> 0) and
            (SR.Name[1] <> CHAR_POINT) then
            DirList.Add(StartDir + SR.Name);
          IsFound := FindNext(SR) = 0;
        end;
        FindClose(SR);

        // Scan the list of subdirectories
        for i := 0 to DirList.Count - 1 do
          FindFiles(DirList[i], FileMask, recursively, FilesList);
      finally
        DirList.Free;
      end;
    end;
  end;

procedure TForm1.BuscarClick(Sender: TObject);
var
  res:TStringList;
  i:integer;
begin
  res:=TStringList.Create;
  FindFiles('.',txtBuscar.Text+'*.*',true,res);
  for i := 0 to res.Count - 1 do
      lstArchivos.Items.Add(res[i]);
end;

end.

Saludos
Responder Con Cita
  #6  
Antiguo 22-07-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Lo que buscas es similar a los launchers como http://www.launchy.net/ (que a proposito, hace lo que quieres ya).

Lo que se hace es crear una base de datos donde se almacenan metadatos de los archivos y sobre la que se hace las busquedas. Una forma trivial de hacerlo es usando sqlite + Full text search. Busca en google como se usa el FTS de sqlite.
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 22-07-2014
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 darkamerico.

De este modo te devuelve en un sólo TStrings todas las carpetas y archivos cuyo nombre contenga la cadena buscada:
Código Delphi [-]
procedure FindFiles(Folder, StrSearched :string; TS: TStrings);
var
  SR: TSearchRec;
  Found: Boolean;
begin
  Screen.Cursor := crHourGlass;
  try
    Folder:= IncludeTrailingPathDelimiter(Folder);
    if FindFirst(Folder + '*.*', faDirectory, SR) = 0 then
    repeat
      Found:= Pos(UpperCase(StrSearched), UpperCase(SR.Name)) <> 0; // ignora mayúsc./minúsc.
      if ((SR.Attr and fadirectory) = fadirectory) then
      begin
        if(SR.Name <> '.') and (SR.Name <> '..') then
        begin
          if Found then
            TS.Add(Folder + SR.Name );
          FindFiles(Folder + SR.Name, StrSearched, TS)
        end
      end
      else if Found then
        TS.Add(Folder + SR.Name);
    until FindNext(SR) <> 0;
    FindClose(SR);
  finally
    Screen.Cursor := crDefault;
  end;
end;

Ejemplo de uso:
Código Delphi [-]
...
begin
  FindFiles('c:\windows', 'debug', ListBoxOccurs.Items);
...

Si queres almacenar carpetas y archivos en dos TStrings diferentes, basta una pequeña modificación:
Código Delphi [-]
procedure FindFiles(Folder, StrSearched :string; TS1, TS2: TStrings);
var
  SR: TSearchRec;
  Found: Boolean;
begin
  Screen.Cursor := crHourGlass;
  try
    Folder:= IncludeTrailingPathDelimiter(Folder);
    if FindFirst(Folder + '*.*', faDirectory, SR) = 0 then
    repeat
      Found:= Pos(UpperCase(StrSearched), UpperCase(SR.Name)) <> 0; // ignora mayúsc./minúsc.
      if ((SR.Attr and fadirectory) = fadirectory) then
      begin
        if(SR.Name <> '.') and (SR.Name <> '..') then
        begin
          if Found then
            TS1.Add(Folder + SR.Name );
          FindFiles(Folder + SR.Name, StrSearched, TS1, TS2)
        end
      end
      else if Found then
        TS2.Add(Folder + SR.Name);
    until FindNext(SR) <> 0;
    FindClose(SR);
  finally
    Screen.Cursor := crDefault;
  end;
end;

Uso:
Código Delphi [-]
...
begin
  FindFiles('c:\windows', 'system', MemoFolders.Lines, MemoFiles.Lines);
...


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 24-07-2014
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 225
Poder: 14
darkamerico Va por buen camino
Mil Gracias ecfisa

Como siempre dando en el clavo, gracias hermano, saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Busqueda recursiva en un ListView elrayo76 Varios 1 19-06-2014 18:02:28
busqueda binaria recursiva alba13 OOP 3 20-04-2009 02:36:14
Busqueda recursiva en disco desde java gulder JAVA 0 10-11-2006 20:02:37
hacer una busqueda en el disco gulder API de Windows 1 05-05-2005 00:30:07
Busqueda recursiva Descendents Varios 2 06-02-2004 18:40:19


La franja horaria es GMT +2. Ahora son las 00:36:54.


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