J?rgen Hestermann wroteBut wasn't the original problem that AllFilesMask was wrong on Windows?
No.
Supplying either '*.*' or '*' to FindFirst() function on Windows will correctly list all files.
The prblem was that the mask supplied to TMaskList.Matches() did not give the expected results, because Matches() treats at the given mask like Linux does (as apparently does Delphi).
But this means that the underlying OS will never see the mask that the
programmer has given.
You cannot call FindFirst() with a masklist ('*.jpg;*.bmp') so you must either filter yourself or make repeated calls to FindFirst with each and every mask of the makslist.
Show quoted text 7 lines
> It can only be "really" fixed if we have a different Matches function.
> But even then, the results may differ across Windows versions (as
> explained earlier).
I don't understand. Before you wrote that FP is using the AllFilesMask and
then filters further internaly. Now you say that the outcome would be
different on different OS's.
No, I did not say that.
Windows itself behaves different across versions, in the way it treats borderline cases (like 'foo.'), when supplying it to the dir command (or FindFirst function).
I implemented a new MatchesWindowsMask function in TMask that ATM seems to mimic the behaviour of "Dir", and I made TFileSearcher use that on if you are on Windows.
It now handles masks like 'foo*.*', 'foo.' and 'foo.*' etc. as exected. (See r40970 and r40973)
This implementation of course does not depend on Windows version, because we programmed it ourselves.
In future, however, it may differ form the way "Dir" treats wildcards, since MS has not documented how borderline cases should be treated in the frist place.
Bart