AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler im Verzeichnis suchen Algo

Ein Thema von Master_BB · begonnen am 17. Jul 2004 · letzter Beitrag vom 17. Jul 2004
Antwort Antwort
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#1

Fehler im Verzeichnis suchen Algo

  Alt 17. Jul 2004, 15:59
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:
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;
Die Testausgabe zeigt mir sogar an den Pfad des gefundenen Pfades jedoch
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
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#2

Re: Fehler im Verzeichnis suchen Algo

  Alt 17. Jul 2004, 16:41
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:

Result := FindPath(ToBeFound, BuildFileName(Path, ASearchRec.Name)); Ich habs allerdings nicht ausprobiert ob es geht, aber es sollte.
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#3

Re: Fehler im Verzeichnis suchen Algo

  Alt 17. Jul 2004, 16:50
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;
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#4

Re: Fehler im Verzeichnis suchen Algo

  Alt 17. Jul 2004, 16:58
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;
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#5

Re: Fehler im Verzeichnis suchen Algo

  Alt 17. Jul 2004, 17:04
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
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#6

Re: Fehler im Verzeichnis suchen Algo

  Alt 17. Jul 2004, 17:17
Hm, kann ich jetzt nicht nachvollziehen. Ich hab solgendes Ausprobiert: (natürlich die BuildFileName(., .) durch ein einfach . + . ersetzt)


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
          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;
Zurückgeliefert wird bei mir dann
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
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#7

Re: Fehler im Verzeichnis suchen Algo

  Alt 17. Jul 2004, 17:20
hm buildfilename hatte bei mir noch nie fehler gemacht
Delphi-Quellcode:
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;
und im programm hatte ich es auhc schon einige male raus gemacht und gekukt.


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?
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#8

Re: Fehler im Verzeichnis suchen Algo

  Alt 17. Jul 2004, 17:26
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
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#9

Re: Fehler im Verzeichnis suchen Algo

  Alt 17. Jul 2004, 17:29
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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