Delphi Program too slow -


i have created program shows in grid subdirectories , files in input directory when input directory has many files , subdirectories pogram becomes slow...

i methods more efficent , faster now. can me?

these methods research various things need :

  • getallsubdirectories1, getallsubdirectories2. // these 2 methods search subdirectories
  • getallfiles1, getallfiles2. // these 2 methods searchthe files , dimension
  • getdimensionecartella // method search subdirectories' dimension.
  • findfiles // method search number of files contained in directory

here methods screenshot of program layout are.

procedure tform1.getallsubdirectories1(directory: string);    var    cercasottocartelle : tsearchrec;    x : integer;    stringa : string;    lunghezzalistasottocartelle : integer;    lunghezzalistadimcartelle : integer;    begin    lunghezzalistasottocartelle := 0;    lunghezzalistadimcartelle := 0;    x := 0;    stringa := '';    try      if findfirst(includetrailingpathdelimiter(directory) + '*.*', faanyfile, cercasottocartelle) < 0        showmessage('there aren''t files in directory ' + directory + '.')      else      begin      listasottocartelletemp := nil;      repeat         if (lowercase(directory) <> 'c:\system volume information\')         begin         if ((isinlist(directory + cercasottocartelle.name + '\') = false) , ((cercasottocartelle.attr , faanyfile) <> 0) , (cercasottocartelle.name <> '..'))         begin            if (cercasottocartelle.name = '.')            begin            if (isinlist(directory) = false)            begin             setlength(listasottocartelletemp,x + 1);             setlength(numerofilescontenuti,listasottocartelle.count + x + 1);             listasottocartelletemp[x] := directory;             x := x + 1;            end;            end            else            begin             setlength(listasottocartelletemp,x + 1);             setlength(numerofilescontenuti,listasottocartelle.count + x + 1);             if (isdirectorywriteable(directory + cercasottocartelle.name + '\'))               listasottocartelletemp[x] := directory + cercasottocartelle.name + '\'             else if (cercasottocartelle.name[length(cercasottocartelle.name) - 1] = '\')             begin               listasottocartelletemp[x] := directory + cercasottocartelle.name;             end             else             begin               listasottocartelletemp[x] := directory + cercasottocartelle.name + '\';             end;             x := x + 1;            end;         end;         end;      until findnext(cercasottocartelle) <> 0;      end;         sysutils.findclose(cercasottocartelle) ;    end;    end;    // getallsubdirectories2   procedure tform1.getallsubdirectories2(directory: string);    var    cercasottocartelle : tsearchrec;    x : integer;    stringa : string;    lunghezzalistasottocartelle : integer;    lunghezzalistadimcartelle : integer;    begin    lunghezzalistasottocartelle := 0;    lunghezzalistadimcartelle := 0;    x := 0;    stringa := '';    try      if findfirst(includetrailingpathdelimiter(directory) + '*.*', faanyfile, cercasottocartelle) < 0        showmessage('there aren''t files in directory ' + directory + '.')      else      begin      listasottocartelletemp := nil;      repeat      if (cercasottocartelle.name <> '')      begin         if (lowercase(directory) <> 'c:\system volume information\')         begin         if ((isinlist(directory + cercasottocartelle.name + '\') = false) , ((cercasottocartelle.attr , faanyfile) <> 0) , (cercasottocartelle.name <> '..'))         begin            if (cercasottocartelle.name = '.')            begin            if (isinlist(directory) = false)            begin             setlength(listasottocartelletemp,x + 1);             setlength(numerofilescontenuti,listasottocartelle.count + x + 1);             listasottocartelletemp[x] := directory;             x := x + 1;            end;            end            else            begin             setlength(listasottocartelletemp,x + 1);             setlength(numerofilescontenuti,listasottocartelle.count + x + 1);             stringa := lowercase(cercasottocartelle.name);             if stringa = 'system volume information'               listasottocartelletemp[x] := directory + cercasottocartelle.name + '\'             else if (cercasottocartelle.name[length(cercasottocartelle.name) - 1] = '\')             begin               listasottocartelletemp[x] := directory + cercasottocartelle.name;             end             else             begin               listasottocartelletemp[x] := directory + cercasottocartelle.name + '\';             end;             x := x + 1;            end;         end;       end;      end;      until findnext(cercasottocartelle) <> 0;     end;         sysutils.findclose(cercasottocartelle) ;    end;    end;   // getfiles1   procedure tform1.getfiles1(const directory : string) ;  var    cercafiles : tsearchrec;    x : integer;    filemanifest : string;    return : bool;    dimensione : currency;  begin    x := 0;    dimensione := 0;    try      if findfirst(includetrailingpathdelimiter(directory) + '*.*', fasysfile or fahidden, cercafiles) < 0        showmessage('there aren''t files in directory ' + directory + '.')      else      if (cercafiles.name <> '')      begin      repeat      filemanifest := copy(cercafiles.name,length(cercafiles.name) - 8,9);      if (length(cercafiles.name) < 9)      begin        if (cercafiles.name[length(cercafiles.name)] <> '\')        begin        if (directory[length(directory)] <> '\')        return := isdirectory(directory + '\' + cercafiles.name + '\')        else        return := isdirectory(directory + cercafiles.name + '\');        end        else        begin        if (directory[length(directory)] <> '\')        return := isdirectory(directory + '\' + cercafiles.name)        else        return := isdirectory(directory + cercafiles.name);        end;        if ((return = false) , ((cercafiles.attr , fasysfile or fahidden) <> 0) , (cercafiles.name <> '.') , (cercafiles.name <> '..'))          begin          setlength(listafilestrovati, x + 1);          setlength(listadimensionifile, x + 1);          listafilestrovati[x] := directory + cercafiles.name;          dimensione := cercafiles.size;          listadimensionifile[x] := currtostrf(dimensione,ffnumber,0);          x := x + 1;          end;      end      else      begin      if (filemanifest <> '.manifest')      begin        if (cercafiles.name[length(cercafiles.name)] <> '\')        begin        if (directory[length(directory)] <> '\')        return := isdirectory(directory + '\' + cercafiles.name + '\')        else        return := isdirectory(directory + cercafiles.name + '\');        end        else        begin        if (directory[length(directory)] <> '\')        return := isdirectory(directory + '\' + cercafiles.name)        else        return := isdirectory(directory + cercafiles.name);        end;        if ((return = false) , ((cercafiles.attr , fasysfile or fahidden) <> 0) , (cercafiles.name <> '.') , (cercafiles.name <> '..'))          begin          setlength(listafilestrovati, x + 1);          setlength(listadimensionifile, x + 1);          listafilestrovati[x] := directory + cercafiles.name;          dimensione := cercafiles.size;          listadimensionifile[x] := currtostrf(dimensione,ffnumber,0);          x := x + 1;          end;      end      else      begin       setlength(listafilestrovati, x + 1);       setlength(listadimensionifile, x + 1);       listafilestrovati[x] := directory + cercafiles.name;       dimensione := cercafiles.size;       listadimensionifile[x] := currtostr(dimensione);       x := x + 1;      end;      end;      until findnext(cercafiles) <> 0;      end;         sysutils.findclose(cercafiles) ;    end;  end;   //..........................................................................................................//   // getfiles2   procedure tform1.getfiles2(const directory : string) ;  var    cercafiles : tsearchrec;    x : integer;    dimensione : currency;    filemanifest : string;    lunghezzalistafiles : integer;    lunghezzalistadimfiles : integer;    begin    lunghezzalistafiles := 0;    lunghezzalistadimfiles := 0;    x := 0;    try      if findfirst(includetrailingpathdelimiter(directory) + '*.*', fasysfile or fahidden, cercafiles) < 0        showmessage('there aren''t files in directory.')      else      lunghezzalistafiles := length(listafilestrovati);      lunghezzalistadimfiles := length(listadimensionifile);      repeat      filemanifest := copy(cercafiles.name,length(cercafiles.name) - 8, 9);      if (length(cercafiles.name) < 9)      begin        if ((isinlist(directory + cercafiles.name) = false) , (isfileinlist(directory + cercafiles.name) = false) , (isdirectoryempty(directory) = false) , ((cercafiles.attr , fasysfile or fahidden) <> 0) , (cercafiles.name <> '.') , (cercafiles.name <> '..'))          begin          setlength(listafilestrovati,lunghezzalistafiles + x + 1);          setlength(listadimensionifile,lunghezzalistadimfiles + x + 1);          listafilestrovati[lunghezzalistafiles + x] := directory + cercafiles.name;          dimensione := cercafiles.size;          listadimensionifile[lunghezzalistadimfiles + x] := currtostrf(dimensione,ffnumber,0);          x := x + 1;          end;      end      else      begin       if (filemanifest <> '.manifest')       begin         if ((isfileinlist(directory + cercafiles.name) = false) , ((cercafiles.attr , fasysfile or fahidden) <> 0) , (cercafiles.name <> '.') , (cercafiles.name <> '..'))          begin          setlength(listafilestrovati,lunghezzalistafiles + x + 1);          setlength(listadimensionifile,lunghezzalistadimfiles + x + 1);          listafilestrovati[lunghezzalistafiles + x] := directory + cercafiles.name;          dimensione := cercafiles.size;          listadimensionifile[lunghezzalistadimfiles + x] := currtostrf(dimensione,ffnumber,0);          x := x + 1;          end;       end       else       begin         setlength(listafilestrovati,lunghezzalistafiles + x + 1);         setlength(listadimensionifile,lunghezzalistadimfiles + x + 1);         listafilestrovati[lunghezzalistafiles + x] := directory + cercafiles.name;         dimensione := cercafiles.size;         listadimensionifile[lunghezzalistadimfiles + x] := currtostrf(dimensione,ffnumber,0);         x := x + 1;       end;      end;      until findnext(cercafiles) <> 0;         sysutils.findclose(cercafiles) ;    end;  end;   // findfiles   function tform1.findfiles(list: array of string; word: string) : currency;  var  numerofiles : currency;  cartella : string;  : integer;  begin   numerofiles := 0;   := 0 length(list) - 1   begin     cartella := copy(list[i],0,length(word));     if (cartella = word)     begin       numerofiles := numerofiles + 1;       end;   end;   result := numerofiles;  end;  //..........................................................................................................//   // getdimensionecartella   function tform1.getdimensionecartella(list: array of string; dir : string) : currency;  var  i,j : integer;  dimensionecartella : currency;  cartella, stringa1 : string;  begin   dimensionecartella := 0;   := 0 length(list) - 1   begin     stringa1 := '';     if (length(list[i]) > length(cartella))     begin       cartella := copy(list[i],0,length(dir));       if (cartella = dir)       begin         j := 1 length(listadimensionifile[findindex(list,list[i])])         begin           if (listadimensionifile[findindex(list,list[i])][j] <> '''')             stringa1 := stringa1 + listadimensionifile[findindex(list,list[i])][j];         end;         dimensionecartella := dimensionecartella + strtocurr(stringa1);       end;     end;   end;   result := dimensionecartella;  end; 

thanks in advance, jack

a special thanksgiving david hefferman me more , more ask better , better questions ^^

this first question here on stackoverflow - delphi search files , directories fastest alghorithm, , because using delphi 2009 , can not use tdirectory class wich introduced in delphi 2010, believe can parse topic , try improve speed of application.


Comments