AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Noch ein problem mit der Suchfunktion.
Thema durchsuchen
Ansicht
Themen-Optionen

Noch ein problem mit der Suchfunktion.

Ein Thema von MoDHellwalker · begonnen am 12. Jun 2003 · letzter Beitrag vom 12. Jun 2003
Antwort Antwort
MoDHellwalker

Registriert seit: 9. Jun 2003
27 Beiträge
 
#1

Noch ein problem mit der Suchfunktion.

  Alt 12. Jun 2003, 16:07
Ich hab die suchfunktion aus der Code library genommen. funktioniert soweit auch ganz gut. aber wenn ich einen dateinamen eingebe sucht er nicht mehr in unterverzeichnisen. was kann ich da tun???
mfg hellwalker
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#2
  Alt 12. Jun 2003, 16:10
Das is ein Tut aus dem "easy delphi helper"
da steht auch drin, wie man nach unterverzeichnissen sucht:

Suchen
  Mit Zitat antworten Zitat
MoDHellwalker

Registriert seit: 9. Jun 2003
27 Beiträge
 
#3
  Alt 12. Jun 2003, 16:32
hmm
ich hab alles so gemacht wie es da steht aber wenn ich den gesuchten dateinamen in eine editfeld eingebe sucht er nich in den unterordnern (außer wenn ich *.* eingebe)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 12. Jun 2003, 16:39
Moin ModHellwalker,

ich hab' das mal eben etwas abgwandelt.
Das Problem ist, dass die Prozedure sofort aussteigt, wenn sie nichts passendes mehr findet.

Das hier ist jetzt zwar auch noch nicht der Weisheit letzter Schluss, da der zu suchende Dateiname exakt (von Gross-/Kleinschreibung mal abgesehen) angegeben werden muss, also keine Wildcards erlaubt sind, aber ansonsten geht's.

Delphi-Quellcode:
procedure FindAllFiles(RootFolder: string; Mask: string; Recurse: Boolean = True);

var
  SR: TSearchRec;
begin
  if AnsiLastChar(RootFolder)^ <> '\then
    RootFolder := RootFolder + '\';
  if Mask = 'then
    Mask := '*.*';
  if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
  try
    repeat
      if SR.Attr and faDirectory = faDirectory then
      begin
        if Recurse then
        begin
          if (SR.Name <> '.') and (SR.Name <> '..') then
            FindAllFiles(RootFolder + SR.Name, Mask, Recurse);
        end;
      end else begin
        if AnsiUpperCase(SR.Name) = AnsiUpperCase(Mask) then begin
          Form1.Memo1.Lines.Add(RootFolder + SR.Name);
        end;
      end;
      Application.ProcessMessages;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MoDHellwalker

Registriert seit: 9. Jun 2003
27 Beiträge
 
#5
  Alt 12. Jun 2003, 16:54
hmm
auf jeden fall schon mal besser. aber das mit den * und den ? muss ich noch hinbekommen dass es auch funktioniert
  Mit Zitat antworten Zitat
MoDHellwalker

Registriert seit: 9. Jun 2003
27 Beiträge
 
#6
  Alt 12. Jun 2003, 17:21
ich habs
mika hat mir geholfen. thx mika
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 12. Jun 2003, 17:27
Moin ModHellwalker,

könntest Du dann auch noch bitte die Lösung präsentieren?
Vermutlich ist die noch für andere interessant.
Danke.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MoDHellwalker

Registriert seit: 9. Jun 2003
27 Beiträge
 
#8
  Alt 12. Jun 2003, 17:38
ups
das vergesse ich immer (egal in welchem forum) *ggg*.
die lösung:
man macht erst ne procedure zum scannen der verzeichnisstruktur und such dann in der gescannten verzeichnisstruktur (zumindest wenn ich das richtig verstanden habe).
Delphi-Quellcode:
procedure Scan(const Path, FileMask: string; FileList: TStrings);
var
  SR: TSearchRec;
begin
  if FindFirst(Path + FileMask, faAnyFile and not (faDirectory or faVolumeID), SR) = 0 then
  try
    repeat
      FileList.Add(ExpandSlash(Path)+SR.Name);
      Application.ProcessMessages;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;

  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  try
    repeat
      if (SR.Attr and faDirectory <> 0) and (SR.Name <> '.') and (SR.Name <> '..') then
         Scan(Path + SR.Name + '\', FileMask, FileList);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;

procedure FindFiles(const Path, FileMask: string; FileList: TStrings);
begin
  if Assigned(FileList) and (Path <> '') then
  try
    FileList.BeginUpdate;
    Scan(ExpandSlash(Path), FileMask, FileList);
  finally
    FileList.EndUpdate;
  end;
end;
  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 06:28 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