Ver Mensaje Individual
  #1  
Antiguo 11-09-2014
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Reputación: 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