Goed, ik heb erover nagedacht en ben tot de volgende conclusies gekomen:
- Zelf een volledige MatchesMask schrijven is geen optie. Kijk naar de code in Masks en zoek het aantal dergelijke bestaande functies (op bv Torry) en je begrijpt waarom. Dit is gewoon te moeilijk/tijdrovend.
- Een mogelijkheid zou kunnen zijn om te kijken of de extentie van de mask helemaal uit wildcards bestaat (* of ?) en op basis daarvan twee keer een matches uit te voeren, namelijk één keer op de mask mét extentie en een keer op de mask zonder extentie. Je gaat dan twee keer de (complexe) MatchesMask functie uitvoeren per file.
- De oplossing die ik uiteindelijk heb bedacht is verreweg de eenvoudigste en is de volgende:
Oftewel: Als de bestandsnaam geen extentie heeft, plak er dan een . achter zodat hij er wel één heeft. Op deze manier kun je zoeken naar *.* en ook de bestanden zonder extentie vinden. Als je expliciet wilt zoeken naar bestanden zonder extentie, dan kun je '*.' als mask opgeven. Het gebruik van ExtractFileExt is heel snel en verwaarloosbaar op de tijd die het kost om de file zelf überhaupt te lezen.Code:function MatchesFileMask(Filename: string; Mask: string): Boolean; begin if ExtractFileExt(Filename) = ''then FileName := FileName + '.'; Result := MatchesMask(Filename, Mask); end;
Extenties van directories worden overigens -in tegenstelling tot wat ik eerder beweerde- niet als extentie gerekend.
Bookmarks