AGB  ·  Datenschutz  ·  Impressum  







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

probleme verzeichnisse zu suchen

Ein Thema von 1ermehr · begonnen am 26. Mär 2008 · letzter Beitrag vom 14. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
1ermehr

Registriert seit: 26. Mär 2008
9 Beiträge
 
#1

probleme verzeichnisse zu suchen

  Alt 26. Mär 2008, 10:24
Wiese kann ich mit der FindFirst, FindNext methode nur dateien suchen obwohl es extra einen parameter faDirectory in der FindFirst gibt?
Problemcode:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
fts: TSearchRec;
fcount, dcount: integer;
begin
 fcount := 0;
 dcount := 0;
 findfirst(DirectoryListBox1.Directory+'\*.*',faDirectory,fts);
 listbox1.Items.Add(fts.Name);
 if fts.Attr = faDirectory then inc(dcount,1)
                            else inc(fcount,1);
 repeat
 findnext(fts);
 listbox1.Items.Add(fts.Name);
 if fts.Attr = faDirectory then inc(dcount,1)
                            else inc(fcount,1);
 until findnext(fts) <> 0;

 FindClose(fts);
 label1.Caption := inttostr(fcount+dcount)+' items. ' + inttostr(fcount)+
                   ' files, ' + inttostr(dcount)+ ' directories.';
 end;
Ergebnis: 127 items. 127 files, 0 directories

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: probleme verzeichnisse zu suchen

  Alt 26. Mär 2008, 10:29
Hi und herzlich willkommen.

Also ich hab den Code mal übernommen, und der läuft Fehlerfrei (ok, mein verzeichnis hab ich in nem edit stehen, aber das dürfte ja egal sein...)

Verwende doch zukünfitg DElphi-Tags und formatiere den Code um den code überischtlicher darzustellen

Hier einmal mein Code (es werden die "Verzeichnisse '.' und '..' mitgezählt!)

Delphi-Quellcode:
procedure TForm1.btnClick(Sender: TObject);
var
  fts: TSearchRec;
  fcount, dcount: integer;
begin
  fcount := 0;
  dcount := 0;
  findfirst(edt.Text + '\*.*', faDirectory, fts);
  listbox1.Items.Add(fts.Name);
  if fts.Attr = faDirectory then
    inc(dcount, 1)
  else
    inc(fcount, 1);
  repeat
    findnext(fts);
    listbox1.Items.Add(fts.Name);
    if fts.Attr = faDirectory then
      inc(dcount, 1)
    else
      inc(fcount, 1);
  until findnext(fts) <> 0;

  FindClose(fts);
  label1.Caption := inttostr(fcount + dcount) + ' items. ' + inttostr(fcount) +
    ' files, ' + inttostr(dcount) + ' directories.';
end;
EDIT: Das ist im wesentlichen dein Code, nur halt das der Name des Verzeichnisses aus dem edt gezogen wird... Wie gesagt, bei mir gibt der mir in dem Label exakt die Dateianzahl und Verzeichnisanzahl zurück.
Sicher, dass in dem angegebenen Verzeichnis unterverzichnisse liegen?

Gruß
Ansgar
  Mit Zitat antworten Zitat
1ermehr

Registriert seit: 26. Mär 2008
9 Beiträge
 
#3

Re: probleme verzeichnisse zu suchen

  Alt 2. Mai 2008, 06:40
Hab den code mal direkt kopiert und es passt immer noch nicht...
Es werden willkührlich verzeichnisse ausgelassen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: probleme verzeichnisse zu suchen

  Alt 2. Mai 2008, 06:48
Sind das besondere Verzeichnisse?
Markus Kinzler
  Mit Zitat antworten Zitat
1ermehr

Registriert seit: 26. Mär 2008
9 Beiträge
 
#5

Re: probleme verzeichnisse zu suchen

  Alt 2. Mai 2008, 06:52
Kein wunder dass was ausgelassen wird wenn man alles doppelt macht, machmal
wünsche ich mir ich könnte lesen

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 fts: TSearchRec;
 fcount, dcount: integer;
begin
 fcount := 0;
 dcount := 0;

 findfirst(DirectoryListBox1.Directory+'\*.*',faDirectory,fts);
 listbox1.Items.Add(fts.Name);

 if fts.Attr = faDirectory then inc(dcount,1)
                           else inc(fcount,1);

 repeat
  findnext(fts); // <--- ganz böser fehler
  listbox1.Items.Add(fts.Name);

  if fts.Attr = faDirectory then inc(dcount,1)
                            else inc(fcount,1);
 until findnext(fts) <> 0;

 FindClose(fts);
 label1.Caption := inttostr(fcount+dcount)+' items. ' + inttostr(fcount)+
 ' files, ' + inttostr(dcount)+ ' directories.';
end;
Trotzdem dankeschön
  Mit Zitat antworten Zitat
2. Mai 2008, 17:14
Dieses Thema wurde von "Christian Seehase" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Kein allgemeines Programmierproblem
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: probleme verzeichnisse zu suchen

  Alt 2. Mai 2008, 17:25
hallo, schau mal hier in der --->Verzeichnisse
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: probleme verzeichnisse zu suchen

  Alt 2. Mai 2008, 17:31
Moin 1ermehr,

auch wenn es jetzt so bei Dir wohl funktioniert, wie Du es Dir vorstellst, habe ich noch ein paar Anmerkungen

FindFirst ist eine Funktion, die mit ihrem Rückgabewert kenntlich macht, ob sie erfolgreich aufgerufen wurde.
Hier fehlt mir die Prüfung, und entsprechende Verzweigung.

Durch einen erfolgreichen Aufruf von FindFirst, wird eine Resource belegt, nämlich ein Handle durch TSearchRec.
Deshalb sollte sichergestellt werden, dass die Resource auch wieder freigegeben wird (try-finally => Resourcenschutzblock)

Delphi-Quellcode:
if FindFirst(...) <> 0 then exit;
try
//... mach was mit der Resource
finally
  FindClose(...);
end;
Da FindFirst intern FindFirstFile aufruft, und diese Funktion nur die Namesmaske zur Prüfung heranzieht, nicht aber die Attribute (das macht, teilweise FindFirst), fährt man, i.d.R. besser, wenn man immer faAnyFile angibt, und dann, nach Bedarf, selber filtert.

Diese Prüfung:

if fts.Attr = faDirectory then ... setzt voraus, dass auch nur das Attribut für ein Directory gesetzt ist. Es kann aber auch versteckt sein, ausserdem verwendet Windows intern das ReadOnly-Flag für Verzeichnisse (wenn sich Windows dabei verhaspelt, kann man schon mal ein schreibgeschütztes Verzeichnis bekommen )
Besser wäre es so abzufragen:

if (fts.Attr and faDirectory) = faDirectory then ...
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
1ermehr

Registriert seit: 26. Mär 2008
9 Beiträge
 
#9

Re: probleme verzeichnisse zu suchen

  Alt 14. Mai 2008, 04:20
Ich versthehe einfach nicht warum die rekursion hier nicht funktioniert sie müsste an der richtigen stelle
sein aber wird stumpf nicht ausgeführt...

Delphi-Quellcode:
procedure findf(path: string);
var
  fts: TSearchRec;
  fcount, dcount: integer;
  buf: string;
begin
  fcount := 0;
  dcount := 0;
  findfirst(path+'\*.*', faanyfile, fts);
  if fts.Attr = faDirectory then
    inc(dcount, 1)
  else
    inc(fcount, 1);
  repeat
    if (DirectoryExists(fts.Name) and not ((fts.Name = '.') or (fts.Name = '..'))) then
     begin
      buf := path+'\'+fts.Name;
      findf(buf); // dieser aufruf wird dreist ignoriert
      form1.ListBox1.Items.add(buf);
      Application.ProcessMessages;
      if FileExists(path+'\'+fts.Name + '\' + form1.edit1.text) then form1.listbox1.Items.Add(fts.Name);
      inc(dcount, 1)
     end
    else inc(fcount, 1);
  until findnext(fts) <> 0;

  FindClose(fts);
  form1.label1.Caption := inttostr(fcount + dcount) + ' items. ' + inttostr(fcount) +
    ' files, ' + inttostr(dcount) + ' directories.';
end;
Bitte helft mir mein kopf platzt bald...
  Mit Zitat antworten Zitat
1ermehr

Registriert seit: 26. Mär 2008
9 Beiträge
 
#10

Re: probleme verzeichnisse zu suchen

  Alt 14. Mai 2008, 05:15
Langsam wirds peinlich für mich... naja ist ja auch schon spät

Delphi-Quellcode:
repeat
    if (DirectoryExists({path+'\'vergessen}fts.Name) and not ((fts.Name = '.') or (fts.Name = '..'))) then
     begin
Ich hab schon mal erwähnt das ich gerne lesen könnte oder?
Denn wenn ichs könnte würd ich hier nicht so fragen stellen
für die man einfach nur mal hinschauen muss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:21 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