effizenter? Ja, da habe ich ein paar Anmerkungen:
1. MatchesMask() ist recht aufwendig - vor allem wenn du nur die Endung vergleichen willst. Dann nutze lieber einmalig
ExtractFileExt() und vergleiche diese.
2. Du willst die Dateiendung entfernen. Dein StringReplace würde diese Endung auch entfernen wenn sie irgendwo in der Mitte des Dateinamens auftreten. Von daher nutze lieber die dafür gedachte
ChangeFileExt().
So und warum es bei dir mit einer
AV im Kernel/kernel32.dll abstürzt, kann ich von den hier geposteten Ausschnitten nicht erkennen. Hier scheint es grundlegend erstmal in Ordnung zu sein. Ich könnte mir nur vorstellen, dass du "dateiliste" nirgendwo instanziiert hast.