AGB  ·  Datenschutz  ·  Impressum  







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

Seltsamkeit bei FindFirst, FindNext

Ein Thema von Thunderchild · begonnen am 5. Dez 2003 · letzter Beitrag vom 6. Dez 2003
Antwort Antwort
Benutzerbild von Thunderchild
Thunderchild

Registriert seit: 12. Nov 2003
Ort: Nohra
139 Beiträge
 
Delphi 7 Personal
 
#1

Re: Seltsamkeit bei FindFirst, FindNext

  Alt 5. Dez 2003, 19:42
Das Prog benennt Dateien um. Man kann auswählen, ob man Dateien, Verzeichnisse oder beide auf einmal bearbeiten lassen will. Außerdem geht das ganze auch in die Verzeichnisse rein.

Folgende ist die rekursive Suchprozedur, eingebettet in die "Suchinterface-Prozedur". Variablen, die hier nicht deklariert sind, stehen in der übergeordneten.
Delphi-Quellcode:
procedure suche(pfad:string);
var slDirDirs:tStringList; c:integer;
begin
  slDirFiles.clear; slDirDirs:=tStringList.create;

  if filenames then begin // Dateien sollen gesucht werden
    i:=findfirst(pfad+fm.egMaske.text,$67,attribs); // Dateien suchen
    while (i=0) and (fm.aTest.tag=1) do begin // aTest.tag=0 ist Abbruch (Button gedrückt)
      application.processMessages;
      slDirFiles.Add(pfad+attribs.name); // sl* sind Stringlists
      inc(cFiles); // Zählvari für spätere Statistik
      i:=findnext(attribs)
    end;
    if fm.cbSorted.Checked then slDirFiles.Sort // ggf. sortieren, wenn angekreuzt
  end;
  findclose(attribs);

// Und das ganze nochmal für Verzeichnisse
// Habe schon probeweise den oberen Teil rausgenommen, half aber nichts

  i:=findfirst(pfad+fm.egMaske.text,$10,attribs); // Verzeichnisse suchen
  while (i=0) and (fm.aTest.tag=1) do begin
    if ((attribs.name<>'.') and (attribs.name<>'..')) then begin
      application.processMessages;
      slDirDirs.Add(pfad+attribs.Name+'\'); // der \ markiert den Pfad in der Liste als Verzeichnis
    end;
    i:=findnext(attribs)
  end;
  findclose(attribs);
  if fm.cbSorted.Checked then slDirDirs.Sort;

  slDateien.AddStrings(slDirFiles); // Dateien in die globale Liste übernehmen
  if Recurse then
  for c:=0 to slDirDirs.count-1 do suche(slDirDirs[c]); // Rekursiv in Unterverzeichnisse gehen
  if dirNames then begin // Verzeichnisse in die Liste aufnehmen?
    slDateien.addStrings(slDirDirs); // dann auch deren Namen in die globale Liste schreiben
    inc(cDirs,slDirDirs.count)
  end;
  slDirDirs.free
end;
Das Problem ist jetzt, daß die Suche nach Verzeichnissen auch Dateien mit anfügt, obwohl ich nur nach Verzeichnissen suchen lasse (besagtes $10). Zur Laufzeit eindeutig daran zu erkennen, daß in der Liste hinter einem Dateinamen ein \ angefügt ist. Also Statt "Datei.txt" kommt dann "Datei.txt\". Und wenn ich auch nach Dateien suche, dann steht demzufolge einmal "Datei.txt" drin UND noch "Datei.txt\".


So, ich fahr jetzt erstmal nach Hause. Schüss
Das letzte Schöne, das in C geschrieben wurde, war Schuberts 9. Sinfonie.
Meine Softwareseite (Link aktualisiert am 13.12.2006).
  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 19:50 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