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
Post a Comment