![]() |
Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe
Ich erstelle mir eine Dateiliste mit FindFirst und FindNext.
Bei jeder Datei prüfe ich, ob diese in einer StringList steht und somit aussortiert werden soll oder nicht. In der Stringlist kann zum Beispiel folgendes stehen
Code:
Verzeichnis1 soll also komplett sammt Inhalt ignoriert werden.
Verzeichnis1
Das bekomme ich nicht so ganz hin. Verzeichnis1 bekomme ich ignoriert, aber nicht dessen Inhalt. Ich prüfe aktuell ganz stupide etwa so bei jedem Datensatz der bei FindFirst/Next entgegen kommt:
Delphi-Quellcode:
Dass hier Verzeichnis1\Datei.txt nicht ignoriert wird, ist ja sonnen-klar. Aber was für einen Vergleich müsste ich hier anstellen, damit das Verzeichnis sammt Inhalt ignoriert wird?
for i := 0 to aStringList.Count - 1 do
begin if aStringList.Strings[i] = sFindMe then // sFindMe kann zum Beispiel sein "Verzeichnis1" oder "Verzeichnis1\Datei.txt"... begin bRes := True; Break; end; end; |
AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe
Evtl. reicht da ja schon System.StrUtils.AnsiStartsText?
|
AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe
Ich bin verwirrt. Einerseits schreibst du, in deiner Stringliste könne sowas wie "Verzeichnis1" stehen. Andererseits schreibst du im Code, in der Variable sFindMe könne sowas wie "Verzeichnis1" stehen. Was steht in diesem Fall in aStringList.Strings[i]?
Grundsätzlich könntest du entweder deinen Suchterm auseinandernehmen (aka Pfad in Teile splitten und diese durchgehen) oder sowas wie Pos() benutzen. Aber aufpassen bei gleichnamigen Verzeichnissen an völlig unterschiedlichen Stellen im Dateisystem! Nur weil ein Verzeichnis namens "Windows" in deiner Liste steht, bedeutet das nicht, dass C:\Windows gemeint ist, es könnte auch D:\Tools\komplett\sinnfreier\Pfadname\Windows sein. Grüße Dalai |
AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe
Zitat:
An das mit POS hatte ich auch schon gedacht aber genau deine angesprochene Problematik macht es so schwer für mich, dass ich das nicht korrekt umsetzen könnte. |
AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe
Predicate
Eine Routine, mit der unerwünschte Ergebnisse herausgefiltert werden können. ![]() |
AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe
Zitat:
Zitat:
Aber das musst du entscheiden, für welchen Anwendungsfall du das benötigtst, ob dir das ins Konzept passt usw. Grüße Dalai |
AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe
GetFiles gucke ich mir in jedem Fall noch an.
Meine Überlegung gerade beim Einkaufen war so in etwa Pi Mal Daumen ...... Ich habe z.B. SR.Name = "C:\Verzeichnis1\Datei1.txt". Jetzt übergebe ich SR.Name an meine Funktion, die durch meine StringList iteriert:
Delphi-Quellcode:
In der StringList steht sagen wir mal ...
for i := 0 to aStringList.Count - 1 do
begin if Pos(sFindMe, aStringList.Strings[i]) = 1 then begin bRes := True; Break; end; end;
Code:
Wenn sFindMe also an Stelle 1 (Anfang) gefunden wird, ist die Bedingung erfüllt.
C:\Verzeichnis1\Datei1.txt
Wäre das ein Anfang oder denke ich gerade zu kompliziert wegen der Schokolade die in der Küche auf mich wartet? Oder ich prüfe andersherum:
Delphi-Quellcode:
Dann könnte in der StringList
for i := 0 to aStringList.Count - 1 do
begin if Pos(aStringList.Strings[i], sFindMe) = 1 then // HIER ANDERS HERUM begin bRes := True; Break; end; end;
Code:
stehen und es würde trotzdem bei
C:\Verzeichnis1\
Code:
zutreffen.
C:\Verzeichnis1\Datei1.txt
(was ausbaubedürftig wäre) |
AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe
Hi Jim,
also wenn ich Dich richtig verstanden habe, stehen in der Stringliste sowohl Verzeichnisnamen als auch Dateinamen, die ausgeschlossen werden sollen. Dann würde ich die Prüfung genau anders herum machen, also bei jeder gefunden Datei den kompletten Dateinamen inkl. Pfad in einer String-Variablen speichern und dann die Stringliste durchgehen und auf Vorkommen in dem Pfad testen. Also ähnlich Deinem Einfall beim Einkaufen, aber leicht abgeändert. Klingt zugegebenermaßen etwas konfus, daher hier mal etwas Pseudocode:
Delphi-Quellcode:
Es werden also alle "ausgefiltert", die einen der ausgeschlossenen Einträge aus der StringList im Dateinamen haben.
ADateiname:= APfad + SR.Name; //SR ist ein TSearchRec, APfad ist der aktuelle mit FindFirst durchsuchte Pfad inkl. abschließendem "\"
AImFilter:= False; FOR i:=0 TO SL.Count-1 DO begin IF Pos(SL[i], ADateiname) > 0 THEN begin AImFilter:= True; Break; end; end; IF NOT AImFilter THEN begin //Datei verarbeiten end; Wenn dann AFileName beispielsweise "c:\Verzeichnis1\datei1.txt" ist, könnte in der StringList (SL) sowohl "c:\Verzeichnis1\datei1.txt", als auch "c:\Verzeichnis1\" oder auch nur "Verzeichnis1" stehen, um die Datei auszuschließen. War es in etwa das was Du gesucht hast? Viele Grüße Kai |
AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe
Danke für die Hilfe!
ich habe es jetzt so gelöst... in meiner Datei stehen alle Pfade in absoluter Form. Z.B. D:\Verzeichnis1\* In meiner Funktion wird nun geprüft, ob das letzte Zeichen ein * ist, wenn ja, wird es entfernt. Dann wird geprüft, ob es sich um ein Verzeichnis oder um eine Datei handelt. Und dann
Delphi-Quellcode:
Wenn in der StringListe steht:
sAktuellerPfad := sl.Strings[i];
if (bIsDirectory and (PosEx(sAktuellerPfad, sMeinPfad, 1) = 1)) or ((not bIsDirectory) and (sAktuellerPfad = sMeinPfad)) then Zitat:
Und Zitat:
Aktuell noch umständlich und schlecht erweiterbar, aber ich gucke mal was sich machen lässt. Ich prüfe jetzt also jeden Pfad der mit FindFirst gefunden wird mit allen Pfaden aus der StringList. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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