AW: Volltextsuche mit Delphi
Code:
So bin ich wieder am Anfang und er sucht nur Dateien im Ordner, er soll aber wenn die Checkbox aktiviert ist auch die Unterordner mit einbeziehen.
procedure TMainSuche.FileSearch(const PathName, FileName: string);
var Rec : TSearchRec; Path : string; begin Path := IncludeTrailingBackSlash(PathName); try if FindFirst (Path + FileName, faAnyFile, Rec) = 0 then begin repeat if ((Rec.attr and faDirectory) = faDirectory) then begin if Checkbox1.Checked then FileSearch(Path, Rec.Name) end else Listbox1.Items.Add(Path + Rec.Name); until FindNext(Rec) <> 0; finally FindClose (Rec); end; end; |
AW: Volltextsuche mit Delphi
Das liegt aber eher an Deinem Aufruf auf die Unterordner:
Müsste
Delphi-Quellcode:
lauten.
FileSearch(Path+Rec.Name, Filename);
|
AW: Volltextsuche mit Delphi
Delphi-Quellcode:
So funktioniert es
procedure TMainSuche.FileSearch(const PathName, FileName: string); var Rec : TSearchRec; Path: string; begin Path := IncludeTrailingBackSlash(PathName); try if FindFirst (Path + FileName, faAnyFile, Rec) = 0 then begin repeat if ((Rec.attr and faDirectory) = faDirectory) then begin if Checkbox1.Checked then begin if (Rec.Name <> '.') and (Rec.Name <> '..') then FileSearch( Path+Rec.Name , FileName); end; end else Listbox1.Items.Add(Path + Rec.Name); until FindNext(Rec) <> 0; end; finally FindClose (Rec); end; end; |
AW: Volltextsuche mit Delphi
Zitat:
|
AW: Volltextsuche mit Delphi
Liste der Anhänge anzeigen (Anzahl: 2)
Bei mir funktioniert der Code
|
AW: Volltextsuche mit Delphi
Ok das ist merkwürdig. Dann liegt der Fehler wohl an einer anderen Prozedur im Gesamtcode bei mir. Nur wo das ist nun die Frage.:?
|
AW: Volltextsuche mit Delphi
Also ich finde nirgends etwas was verhindern könnte dass das Programm nicht richtig läuft hier mal den kompletten Code:
Code:
Findet ihr da etwas?
unit Volltextsuche;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, FileCtrl, System.IOUtils , Vcl.Buttons; type TMainSuche = class(TForm) cbSuche: TComboBox; lblSuche: TLabel; cbZiel: TComboBox; lblZiel: TLabel; btnZiel: TButton; BBstart: TBitBtn; ListBox1: TListBox; CheckBox1: TCheckBox; BitBtn1: TBitBtn; procedure btnZielClick(Sender: TObject); procedure BBstartClick(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private-Deklarationen } procedure FileSearch(const PathName, FileName : string); public { Public-Deklarationen } end; var MainSuche: TMainSuche; OverrideCbBAdr: boolean = false; implementation {$R *.dfm} uses FileInfo; procedure TMainSuche.FileSearch(const PathName, FileName: string); var Rec : TSearchRec; Path: string; begin Path := IncludeTrailingBackSlash(PathName); try if FindFirst (Path + FileName, faAnyFile, Rec) = 0 then begin repeat if ((Rec.attr and faDirectory) = faDirectory) then begin if Checkbox1.Checked then begin if (Rec.Name <> '.') and (Rec.Name <> '..') then FileSearch( Path+Rec.Name , FileName); end; end else Listbox1.Items.Add(Path + Rec.Name); until FindNext(Rec) <> 0; end; finally FindClose (Rec); end; end; procedure TMainSuche.BitBtn1Click(Sender: TObject); begin ListBox1.Clear; end; procedure TMainSuche.btnZielClick(Sender: TObject); var Directory: string; begin Directory := 'C:\'; if SelectDirectory('Bitte ein Verzeichnis wählen.','',Directory) then begin if not OverrideCbBAdr then begin OverridecbBAdr := true; cbZiel.Items.Insert(0,''); end; cbZiel.Items.Delete(0); cbZiel.Items.Insert(0,Directory); cbZiel.ItemIndex := 0; end; end; procedure TMainSuche.BBstartClick(Sender: TObject); begin ListBox1.Clear; FileSearch(cbZiel.Text, cbSuche.Text); end; end. |
AW: Volltextsuche mit Delphi
Zu was die Zwischenspeicherung des Pfades in einer ComboBox? Wenn schon, warum dann kein Label oder Edit? (es wird ja immer in den 1. Eintrag geschrieben)
|
AW: Volltextsuche mit Delphi
nee, das geht ja auch nicht!
Angenommen Du suchst in
Code:
nach
C:\
Code:
dann sucht Deine Routine in
*.sql
Code:
namch einer Datei die die Bedingung
C:\
Code:
erfüllt, da dies nicht der Fall ist (höchstwahrscheinlich) verabschiedet sich Deine Suche gleich wieder.
*.sql
wenn Du rekursiv suchen willst, dann mußt Du auf jeden Fall die (möglichen) Verzeichnisse
Delphi-Quellcode:
extra behandeln.
if Checkbox1.Checked then
begin if (Rec.Name <> '.') and (Rec.Name <> '..') then FileSearch( Path+Rec.Name , FileName); end; Übrigens ist der Rückbezug auf eine andere Komponente des Forms nicht unbedingt der Weisheit letzer Schluß. Besser wäre es der Procedure gleich ein
Delphi-Quellcode:
mitzugeben!
recursiv:boolean
Gruß K-H |
AW: Volltextsuche mit Delphi
Habe das Problem mit dem Unterordner wie folgt gelöst. :)
Code:
Das auskommentierte ist der alte Befehl und das direkt darunter der neue. Und so beachtet das Programm dann auch die Unterordner. Ich halte euch weiter auf dem laufenden bzw. falls weitere Probleme auftauchen melde ich mich hier. Danke für eure bisherige Hilfe.
procedure TMainSuche.FileSearch(const PathName, FileName: string);
var Rec : TSearchRec; Path: string; begin Path := IncludeTrailingBackSlash(PathName); try //if FindFirst (Path + FileName, faDirectory, Rec) = 0 then if FindFirst (Path+'*', faAnyFile, Rec) = 0 then begin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz