A
Hallo
Das mit dem "" wird aber nicht klappen denke ich, denn ich prüfe ja den Filter auf "" und der ist bei jedem durchlauf ein anderer.
Ich meine damit, das du vor dem Vergleich von einem ganzen Haufen Dateien (du rufst ja für jede Datei CheckIfFilter auf) erstmal schauen solltest, ob in filterFn oder in filterFe überhault ein * steckt. Denn wenn ja, kannst du dir das Prüfen der Dateinamen bzw. der Erweiterung ganz sparen. Am besten trennst du die Funktion auf (Pseudocode) :
bool PrüfeObPlatzhalterVorhanden(FilterListe)
{
return Mindestens_ein_Element_ist_Platzhalter(FilterListe);
}
bool NamePasstInFilter(String Name)
{
return Name_und_nur_Name_prüfen(Name);
}
bool ErweiterungPasstInFilter(String Name)
{
return Erweiterung_und_nur_Erweiterung_prüfen(Name);
}
// Ein Durchgang
...
Dateien // Deine Liste mit den zu prüfenden Dateinamen
bool Name_relevant = PrüfeObPlatzhalterVorhanden(filterFn);
bool Erweiterung_relevant = PrüfeObPlatzhalterVorhanden(filterFe);
Für jeden Namen in Dateien
{
Wenn ((!Name_relevant || NamePasstInFilter(Name)) &&
((!Erweiterung_relevant || ErweiterungPasstInFilter(Name)))
{
VerarbeiteDatei(Name) // Name passt in Filter
}
}
Vorteil : Wenn mindestens Name oder Erweiterung durch ein Platzhalter gefiltert werden, sparst du dir eine ganze Hälfte der Vergleichsarbeit. Wenn sowohl Name als auch Erweiterung mindestens einen Platzhalter beinhalten, fällt der Vergleich mit den Filtern gleich ganz weg.
Desweiteren solltest du auch noch überlegen, das Zerteilen des Dateinamens selber zu übernehmen. Denn ExtractFileName als auch ExtractFileExt machen fasst dasselbe : Sie suchen nach einem '.' im String. Wenn also kein Platzhalter vorhanden ist und Name als auch Erweiterung geprüft werden, wird ein Dateiname zweimal zerlegt. Mit einer manuellen Zerlegung kannst du dir beide Teile in einem Arbeitsschritt liefern lassen.
bis bald
akari