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 11-09-2014
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Hilos para Recorer Directorios

Hola:
en un viejo proyecto que retomo creo que una vez al año, estoy tratando de recorrer un árbol de directorios de windows e insertar ficheros en una base de datos.
Ese tratamiento lo he intentado varias veces con hilos y no he logrado hacerlo porque se me enreda mucho ya que es recursivo.

este es el codigo que uso recursivo para insertar los ficherso en la base de datos. le paso como parámetro el diretorio a escanear, si me pudieran hechar una mano como hacer hilos con esto, la cuestion es que no debo hacer demasiados hilos, no se como hacerlo gracias

Código Delphi [-]
procedure TForm2.RastreaDir(dir: string);
var
  FileSearch: TSearchRec;
  R: integer;
  s: string;
begin
  ChDir(dir);
  if FindFirst('*.*', FaDirectory, FileSearch) = 0 then
    repeat
      if ((FileSearch.Attr and FaDirectory) = FaDirectory) then
      begin
        application.ProcessMessages;
        if (FileSearch.Name <> '.') and (FileSearch.Name <> '..') then
          RastreaDir(dir + '\' + FileSearch.Name);   //esta es la llamada recursiva con el nuevo directorio encontrado
      end
      else
      begin
        application.ProcessMessages;
        if cancelando then Exit;
        PCarpeta.Progress := PCarpeta.Progress + 1;  PCarpeta.Refresh; //este es un progress que se mueve seun sea el directorio que este escaneando
        LFichero.Caption := FileSearch.Name; LFichero.Refresh; // este es el fichero que se esta trabajando 
        s := CaminoCompleto(dir + '\' + FileSearch.Name); //este es el camino completo del fichero encontrado para poder encontrarlo en windows.
        if DataModule1.ExisteFichero(FileSearch.Name, s) then
        begin
          if smessagedlg('Organizador Electrónico',
            'El fichero ' + FileSearch.Name +
            ' existe en la base de datos desea sobreescribirlo ? ',
            mtInformation, [mbYes, mbno], 1) = mrYes then
            AgregaFichero(dir + '\' + FileSearch.Name);
        end
        else
           AgregaFichero(dir + '\' + FileSearch.Name); //este procedimiento inserta en la base de datos el fichero
      end;
      if cancelando then Exit;
    until FindNext(FileSearch) <> 0;
  FindClose(FileSearch);
end;
Responder Con Cita
  #2  
Antiguo 11-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
juank1971,

Cita:
Empezado por juank1971
...estoy tratando de recorrer un árbol de directorios de Windows e insertar ficheros en una base de datos...el código que uso es recursivo...le paso como parámetro el directorio a escanear...si me pudieran hechar una mano como hacer hilos...


Te sugiero revisar el Msg #10 del Hilo Busqueda de Archivos Específicos, el cual puede servir de base a tu aplicación.

Espero sea útil

Nelson.
Responder Con Cita
  #3  
Antiguo 11-09-2014
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
ok gracias voy a mirar
Responder Con Cita
  #4  
Antiguo 12-09-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.286
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
Yo intentaría primero dividir el trabajo en 2 partes.
Utilizar threads con Base de Datos es un poco más complejo que con código normal, ya que debes definir parámetros de conexión nuevos para el hilo (hilos). No puedes usar en un hilo la misma conexión que utilizas en el programa principal.
Así que yo me plantearía realizar el proceso en 2 partes:

1) Utilizar hilos para la búsqueda de ficheros en disco. El resultado puede ser, por ejemplo, rellenar una lista (TStringList) con los path de los ficheros encontrados.
2) Insertar en la Base de Datos los ficheros. Este segundo paso realizarlo sin Threads.

Para el primer paso, si piensas el proceso para utilizar más de uno (dividir el trabajo), piensa en limitar el número máximo para no sobrecargar demasiado con la creación de demasiados hilos.

Para el segundo paso te bastaría un recorrido secuencial de la lista.
__________________
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 12-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
juank1971,

Te sugiero revisar esta información
Espero sea útil

Nelson.
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
Problema con hilos para conexion de biometricas JULIPO Varios 10 08-01-2015 18:52:05
Recorer dato de MASTERDATA si no se ocupa en FAST REPORT rotsen26 Impresión 1 01-08-2013 08:07:45
Ejemplo sencillo para ejecutar Hilos en delphi n03l Varios 4 23-08-2012 15:23:27
Control para seleccionar directorios y archivos ElDuc Varios 2 03-10-2006 20:02:08


La franja horaria es GMT +2. Ahora son las 23:45:15.


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