Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alle Dateien eines Verzeichnisses außer *.ini (https://www.delphipraxis.net/66902-alle-dateien-eines-verzeichnisses-ausser-%2A-ini.html)

Bea 6. Apr 2006 11:18


Alle Dateien eines Verzeichnisses außer *.ini
 
Hallo,
ich möchte in einem Verzeichnis alle Dateien aufgelistet bekommen außer *.ini
Im Moment liste ich alle Dateien mit folgender Funktion auf:

Delphi-Quellcode:
procedure ListFileDir(Path: string; FileList: TStrings);
var
  SR: TSearchRec;
begin
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
    begin
      repeat
        if (SR.Attr and faDirectory) = 0 then
          begin
            FileList.Add(SR.Name);
          end;
      until FindNext(SR) <> 0;
      FindClose(SR);
    end;
end;
Wie kann ich nun bestimmte Dateitypen ausschließen?

Gruß Bea

Matze 6. Apr 2006 11:25

Re: Alle Dateien eines Verzeichnisses außer *.ini
 
Hallo Bea,

du könntest es einfach so lösen. Anstelle von

Delphi-Quellcode:
FileList.Add(SR.Name);
schreibst du

Delphi-Quellcode:
if ExtractFileExt(SR.Name) <> '.ini' then
  FileList.Add(SR.Name);

marabu 6. Apr 2006 12:13

Re: Alle Dateien eines Verzeichnisses außer *.ini
 
Hallo.

Auch wenn man auf Rekursion verzichtet und Dateinamen ohne Pfadanteil ausreichend sind - da wären schon noch ein paar Details, die man verbessern könnte - ohne die Signatur oder die Semantik zu verändern:

Delphi-Quellcode:
procedure ListFileDir(Path: string; FileList: TStrings);
var
  SR: TSearchRec;
begin
  Path := IncludeTrailingPathDelimiter(Path); //1
  FileList.BeginUpdate; //2
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if ((SR.Attr and faDirectory) = 0)
      and (CompareText(ExtractFileExt(sr.Name), '.ini') <> 0) then //3
        FileList.Add(SR.Name);
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
  FileList.EndUpdate; //4
end;
//1 - eine gute Stelle um den terminierenden Backslash einzubauen
//2 - beschleunigt die Abwicklung beim Speichern z.B. in einer ListBox
//3 - schließt auch Dateien mit .INI aus
//4 - reaktiviert die Anzeige der visuellen Komponente (ListBox)

Freundliche Grüße vom marabu

himitsu 6. Apr 2006 12:14

Re: Alle Dateien eines Verzeichnisses außer *.ini
 
Empfehlen würde ich dann eher sowas ... was wäre, wenn das ini nicht kleingeschrieben ist :zwinker:
Delphi-Quellcode:
if AnsiLowerCase(ExtractFileExt(SR.Name)) <> '.ini' then
  FileList.Add(SR.Name);
[add]
upps, wo kommt den marabu her :shock:
Und ja, CompareText geht auch ^^

[add2]
Ach ja, vor
Delphi-Quellcode:
FileList.BeginUpdate; //2
macht sich bestimmt ein
Delphi-Quellcode:
FileList.Clear;
nicht schlecht.

Sharky 6. Apr 2006 12:30

Re: Alle Dateien eines Verzeichnisses außer *.ini
 
Zitat:

Zitat von himitsu
...
Delphi-Quellcode:
FileList.Clear;
nicht schlecht.

Hai Forenengel,

ich finde eine Funktion sollte nicht einfach den Inhalt von etwas löschen was ich ihr übergebe. Es kann ja sein das ich in der StingList die Dateien aus verschiedenen Verzeichnissen haben möchte. Da sollte man entweder ein Flag übergeben das die SL gelöscht wird oder es einfach dem Programmierer überlassen sich darum zu kümmern. ;-)

Bea 6. Apr 2006 13:01

Re: Alle Dateien eines Verzeichnisses außer *.ini
 
...oh man, das ging ja schnell mit den Hinweisen :thumb:
Ich bedanke mich und probier's gleich aus.
Bea


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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 by Thomas Breitkreuz