AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit FindFirst und Dateiendungen
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit FindFirst und Dateiendungen

Ein Thema von Helmi · begonnen am 20. Dez 2006 · letzter Beitrag vom 26. Sep 2008
 
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Problem mit FindFirst und Dateiendungen

  Alt 21. Dez 2006, 10:22
Hallo Helmi,

Zitat von Helmi:
Wenn ich sowieso ein zweites mal prüfen muss ob die Endung pass, dann kann ich ja bei FindFirst alle Dateien suchen lassen (*.*)
Warum läßt du dir alle Dateien im Verzeichnis liefern, wenn dich nur eine Teilmenge interessiert? Damit schickst du ja auch alle Dateienamen durch UpperCase und einen Stringvergleich.

Zitat:
So brauch ich mir die Endung nicht speichern.
einzigste Änderung im normalen Code: anstatt "*.msk*, muss ich jetzt ".msk" schreiben
Dadurch wird die Routine aber auch unflexibler, weil sie Masken wie 'Level*.msk' nicht mehr unterstützt. Und das nur, weil du eine (lokale) Variable sparen möchtest?

Ich habe noch etwas festgestellt: bei der Verwendung von Jokerzeichen ('?' bzw. '*') in der Maske für die Namenserweiterung darf kein Vergleich der Extensions stattfinden, weil dieser Vergleich immer fehlschlagen würde. Die notwendigen Änderungen habe ich im folgenden Quelltext markiert:

Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: String; List: TStrings);
var
  ext : string;
  wild : Boolean; // neu
  SR: TSearchRec;
begin
  List.BeginUpdate;
  try
    List.Clear;
    If Directory <> 'then
      begin
        ext := ExtractFileExt(Mask);
        wild := (Pos('?', ext) > 0) or (Pos('*', ext) > 0); // neu
        Directory := IncludeTrailingPathDelimiter(Directory);
        If FindFirst(Directory + Mask, faAnyFile and (not faDirectory), SR) = 0 then
          try
            repeat
              if wild or SameText(ExtractFileExt(SR.Name), ext) then // geändert
                List.Add(Directory + SR.Name)
            until FindNext(SR) <> 0;
          finally
            FindClose(SR);
          end;
      end;
  finally
    List.EndUpdate;
  end;
end;
Ein Mangel läßt sich auf diesem Weg nicht so einfach umgehen: eine Maske wie '*.m??' liefert dir auch Dateinamen, deren Extension nicht genau drei Zeichen enthält.

Auch wenn du nicht alle Features der Routine im aktuellen Projekt brauchst, solltest du sie nicht entfernen - sie stören ja nicht. Irgendwann benötigst du sie vielleicht, und dann kannst du diese Funktion ohne Änderung wiederverwenden.

Gruß Hawkeye
  Mit Zitat antworten Zitat
 


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 22:44 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