![]() |
Fehler im Verzeichnis suchen Algo
Hy Leutz,
hab ein Problem mit meinem Verzeichnissuch algorithmus auf Findfirst basierend. Und zwar findet er nur die Verzeichnisse unter C:\ wen ich ihm als ausgangspfad c:\ gebe und nicht die unterordner. Wenn ich mir alles was er durchsucht ausgeben lasse sehe ich das er alle unterordner findet jedoch gibt er mir als Result nicht den den er gefunden hat. Hier der Code
Delphi-Quellcode:
Die Testausgabe zeigt mir sogar an den Pfad des gefundenen Pfades jedoch
function FindPath(ToBeFound, Path : string) : string;
var ASearchRec : TSearchRec; begin Result := ''; if Path[Length(Path)] <> '\' then Path := Path + '\'; if FindFirst(Path + '*.*', faDirectory, ASearchRec) = 0 then begin repeat if ((ASearchRec.Attr and faDirectory) = faDirectory) and (ASearchRec.Name <> '..') and (ASearchRec.Name <> '.') then begin While CompareText(ToBeFound, ASearchRec.Name) = 0 do begin Unit1.Form1.ListBox1.Items.Add(BuildFileName(Path, ASearchRec.Name)); Result := BuildFileName(Path, ASearchRec.Name); Break; end; FindPath(ToBeFound, BuildFileName(Path, ASearchRec.Name)); end; until FindNext(ASearchRec) <> 0; FindClose(ASearchRec); end; end; speichert er es nicht in Result und hört auch nicht auf zu suchen. BuildFileName ist eine procedure von mir die Dateistrings zusammenfügt und darauf aufpasst das keine doppelten \ oder so entstehen diese läuft 100%tig. Wäre echt cool wenn ihr den Fehler findet. Greetz Master_BB |
Re: Fehler im Verzeichnis suchen Algo
welchen Sinn macht denn deine While-Schleife? Ersetz mal das While durch ein If und probiers damit aus.
und dann ergänze deinen FindPath Aufruf folgendermasen:
Delphi-Quellcode:
Ich habs allerdings nicht ausprobiert ob es geht, aber es sollte.
Result := FindPath(ToBeFound, BuildFileName(Path, ASearchRec.Name));
|
Re: Fehler im Verzeichnis suchen Algo
ob da nun while oder if steht ist suppe
while benutzte ich da das dann kürzer ist hier mit if wo soll ich die zeile nocheinmal reinbauen?
Delphi-Quellcode:
function FindPath(ToBeFound, Path : string) : string;
var ASearchRec : TSearchRec; begin Result := ''; if Path[Length(Path)] <> '\' then Path := Path + '\'; if FindFirst(Path + '*.*', faDirectory, ASearchRec) = 0 then begin repeat if ((ASearchRec.Attr and faDirectory) = faDirectory) and (ASearchRec.Name <> '..') and (ASearchRec.Name <> '.') then begin if CompareText(ToBeFound, ASearchRec.Name) = 0 then begin Unit1.Form1.ListBox1.Items.Add(BuildFileName(Path, ASearchRec.Name)); Result := BuildFileName(Path, ASearchRec.Name); Break; end else begin FindPath(ToBeFound, BuildFileName(Path, ASearchRec.Name)); end; end; until FindNext(ASearchRec) <> 0; FindClose(ASearchRec); end; end; |
Re: Fehler im Verzeichnis suchen Algo
If und While ist nicht Suppe in diesem Fall wegen dem Break
weil mit While wird bei Break nur die While schleife abgebrochen und es wird weitergesucht. Bei einem If unterbricht Break die repeat schleife, und die willst du ja unterbrechen. Und was ich vorhin vergessen habe, nach dem FindPath sollte auch ein Break stehen was Result <> '' ist.
Delphi-Quellcode:
function FindPath(ToBeFound, Path : string) : string;
var ASearchRec : TSearchRec; begin Result := ''; if Path[Length(Path)] <> '\' then Path := Path + '\'; if FindFirst(Path + '*.*', faDirectory, ASearchRec) = 0 then begin repeat if ((ASearchRec.Attr and faDirectory) = faDirectory) and (ASearchRec.Name <> '..') and (ASearchRec.Name <> '.') then begin if CompareText(ToBeFound, ASearchRec.Name) = 0 then begin Unit1.Form1.ListBox1.Items.Add(BuildFileName(Path, ASearchRec.Name)); Result := BuildFileName(Path, ASearchRec.Name); Break; end else begin Result := FindPath(ToBeFound, BuildFileName(Path, ASearchRec.Name)); if Result <> '' then Break; end; end; until FindNext(ASearchRec) <> 0; FindClose(ASearchRec); end; end; |
Re: Fehler im Verzeichnis suchen Algo
das problem bleibt dennoch
und zwar füllt er Result nicht wenn das gesuchte Verzeichnis ein unterverzeichnis ist. in der testausgabe gibt es es aus aber es wird nicht in result gespeichert |
Re: Fehler im Verzeichnis suchen Algo
Hm, kann ich jetzt nicht nachvollziehen. Ich hab solgendes Ausprobiert: (natürlich die BuildFileName(., .) durch ein einfach . + . ersetzt)
Delphi-Quellcode:
Zurückgeliefert wird bei mir dann
function FindPath(ToBeFound, Path : string) : string;
var ASearchRec : TSearchRec; begin Result := ''; if Path[Length(Path)] <> '\' then Path := Path + '\'; if FindFirst(Path + '*.*', faDirectory, ASearchRec) = 0 then begin repeat if ((ASearchRec.Attr and faDirectory) = faDirectory) and (ASearchRec.Name <> '..') and (ASearchRec.Name <> '.') then begin if CompareText(ToBeFound, ASearchRec.Name) = 0 then begin Form1.ListBox1.Items.Add(Path + ASearchRec.Name); Result := Path + ASearchRec.Name; Break; end else begin Result := FindPath(ToBeFound, Path+ ASearchRec.Name); if Result <> '' then Break; end; end; until FindNext(ASearchRec) <> 0; FindClose(ASearchRec); end; end; procedure TForm1.Button1Click(Sender: TObject); begin showmessage(findpath('HTML', 'c:\')); end; c:\cygwin\usr\doc\libxml2-2.4.23\html und das ist ein unterverzeichnis bei mir. evtl liegt dein Fehler in der BuildFilePath Funktion? Die konnte ich leider nicht testen |
Re: Fehler im Verzeichnis suchen Algo
hm buildfilename hatte bei mir noch nie fehler gemacht
Delphi-Quellcode:
und im programm hatte ich es auhc schon einige male raus gemacht und gekukt.
function BuildFileName(ADir, AFileName : string) : string;
begin if ADir[Length(ADir)] <> '\' then ADir := ADir + '\'; if AFileName[1] = '\' then Delete(AFileName,1,1); if AFileName[Length(AFileName)] = '\' then Delete(AFileName,Length(AFileName),1); Result := ADir + AFileName; end; HM WASN DAS? Jetzt hab ich ein neues projekt mit deinem bzw meinem von dir modifizierten code gemacht und da klappts Warum klappts nicht wenn die funktion in meiner Unit ist? |
Re: Fehler im Verzeichnis suchen Algo
Bei mir funktioniert es auch mit der BuildFileName Funktion einwandfrei. Sorry, bei mir macht die Funktion keinen Fehler. Ich weiss leider nicht wieso sie bei dir nicht funktioniert. Kann die da nicht weiterhelfen
|
Re: Fehler im Verzeichnis suchen Algo
ne du hast mir geholfen deine Version meiner Funktions funktioniert
jetzt hab ich deine in meine Unit kopiert und es funktioniert ebenfals DAS IST JA VOLL PSYDO warum wollte meine nicht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz