29. juni 2004 - 19:40Der er
8 kommentarer og 1 løsning
Søgefunktion
Jeg har en component: FileSearch Jeg har også en stumpkode:
procedure SaetBackSlash(var Mappe: string); begin if Mappe[Length(Mappe)] <> '\' then Mappe := Mappe + '\'; end;
// Til at finde filerne: function FindFiler(Mappe: string): string; var SearchRec: TSearchRec; FindResult: Integer; begin SaetBackSlash(Mappe); FindResult := FindFirst(Mappe + '*.*', faAnyFile, SearchRec); try // Søg først efter filer while FindResult = 0 do begin Inc(X,1); Form1.lbFiler.Items.Add(AnsiLowerCase(Mappe + SearchRec.Name)); Form1.Label1.Caption := SearchRec.Name + ' - ' + IntToStr(SearchRec.Size) + ' - ' + IntToStr(X); Form1.Label1.Update; FindResult := FindNext(SearchRec); end; // Søg dernæst efter mapper FindResult := FindFirst(Mappe + '*.*', faDirectory, SearchRec); // Hvis mapperne ikke er '.' og '..', // så søg videre i disse mapper (rekursivt) while FindResult = 0 do begin if ((SearchRec.Attr and faDirectory) = faDirectory) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then FindFiler(Mappe + SearchRec.Name); FindResult := FindNext(SearchRec); end; finally FindClose(SearchRec); end; end;
og jeg har Windows Søgefunktion
------------------------
Mit problem Min søgefunktion skal finde ALLE, og jeg MENER ALLE filer på en Harddisk eller en mappe.
Men de 3 søgefunktion jeg har fået fat i: Giver IKKE det samme resultalt. Og jeg har checket om jeg tæller mapper med eller ej.
//dl
Jeg skal have en søge funktion som virker :) hvor finder jeg sådan en ... eller laver den ?
Function Findfiles( Directory: String; FilterFiles: String; IncludeSubDir: Boolean ): Integer; var SearchRec: TSearchRec; FindResult: LongInt; begin FindResult := FindFirst(IncludeTrailingBackslash(Directory) + FilterFiles, faAnyFile + faDirectory, SearchRec); Try while FindResult = 0 do begin { Sikrer at det ikke er . eller .. bibloteket vi har fundet med en file } if (SearchRec.Attr = faAnyFile) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin // If file, then ? // Findfiles(IncludeTrailingBackslash(Directory) + IncludeTrailingBackslash(SearchRec.Name), FilterFiles, IncludeSubDir); // En listbox, hvor alle filer bliver vist. Form1.ListBox1.Items.Add(SearchRec.Name + ',' + IntToStr(SearchRec.Size) ); end;
{ Sikrer at det ikke er . eller .. bibloteket vi har fundet Og IncludeSubDir = True } if (SearchRec.Attr = faDirectory) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') and ( IncludeSubDir = True ) then begin Findfiles(IncludeTrailingBackslash(Directory) + IncludeTrailingBackslash(SearchRec.Name), FilterFiles, IncludeSubDir); end; FindResult := FindNext(SearchRec); end; finally FindClose(SearchRec); end; end;
<<< slut >>>
Hvor virker det ikke.
*Den finder filerne, med add dem ikke til min listbox *Den finder ikke undermapper, hvorfor ?
Function Findfiles( Directory: String; FilterFiles: String; IncludeSubDir: Boolean ): Integer; var SearchRec: TSearchRec; FindResult: LongInt; begin FindResult := FindFirst(IncludeTrailingBackslash(Directory) + FilterFiles, faAnyFile, SearchRec); Try while FindResult = 0 do begin { Sikrer at det ikke er . eller .. bibloteket vi har fundet med en file } if (SearchRec.Attr and faAnyFile = faAnyFile) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin // If file, then ? // Findfiles(IncludeTrailingBackslash(Directory) + IncludeTrailingBackslash(SearchRec.Name), FilterFiles, IncludeSubDir); // En listbox, hvor alle filer bliver vist. Form1.ListBox1.Items.Add(SearchRec.Name + ',' + IntToStr(SearchRec.Size) ); end;
{ Sikrer at det ikke er . eller .. bibloteket vi har fundet Og IncludeSubDir = True } if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') and ( IncludeSubDir = True ) then begin Findfiles(IncludeTrailingBackslash(Directory) + IncludeTrailingBackslash(SearchRec.Name), FilterFiles, IncludeSubDir); end; FindResult := FindNext(SearchRec); end; finally FindClose(SearchRec); end; end;
* Den finder filerne, med appender dem ikke ? //dl
... if (SearchRec.Attr and faDirectory) = faDirectory then begin // got a folder if (SearchRec.Name <> '.') and (SearchRec.Name) <> '..') then FindFiles(Directory + '\' + SearchRec.Name,IncludeSubDir); end else begin // got a file end; ...
sådan frit fra leveren (det der er tilbage) med skrigende unger omkring...
if (SearchRec.Attr and faDirectory) = faDirectory then begin // got a folder if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') and ( IncludeSubDir = True ) then begin Findfiles(IncludeTrailingBackslash(Directory) + IncludeTrailingBackslash(SearchRec.Name), FilterFiles, IncludeSubDir); end else begin // got a file Form1.ListBox1.Items.Add(SearchRec.Name + ',' + IntToStr(SearchRec.Size) ); end; end;
Så får jeg stadig ikke noget. Det eneste den appender er:
Hvis du skal søge hele disken igennem skal du bruge *.* som filter maske..
procedure FindFiles(Folder : string); var SearchRec : TSearchRec; begin if FindFirst(Folder + '*.*',faAnyFile,SearchRec) = 0 then begin repeat if (SearchRec.Attr and faDirectory) = faDirectory then begin if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then FindFiles(Folder + SearchRec.Name + '\'); end else begin Form1.ListBox1.Items.Add(Folder + SearchRec.Name);
// bare en bremse... if Form1.ListBox1.Items.Count > 200 then Break; end; until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin FindFiles('d:\prj\'); end;
k, jeg viste ikke man lige kunne gøre det på den måde. //dl
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.