
Martin wrote:
I have used the filesystem library for some time now and noticed that there is no portable way of iterating over files in a directory that matches a pattern.
In my applications I often need to find all files in a directory that matches "*.txt" or "input.*".
I think it would be a good idea to add another constructor to the directory_iterator that support some primitive wilcards. The support could be limited to "*" at the end or followed by a "." (e.g. "*", "a*.*", "*.txt", "a.*")
Well, supposing that one has a 'shell wildcard matcher' it should be possible to do: typedef filter_iterator<wildcard_matcher, directory_iterator> it; for(it i = it(wildcard_matcher("*.txt), directory_iterator("dir")), e; i != e; ++i) { } which is not altogether nice, but workable. So, we only need somebody write the wildcard_matcher, or better yet, function to convert from wildcard syntax into regex syntax. Actually, I'd love to have some better syntax. E.g. with views it would be possible to write: for_each(filter(files("dir"), wildcard_matcher("*.txt")), /* lambda */ ); which is good except for the need to use lambda -- which might not be good in all cases, so someone should push 'foreach' macro Or maybe, filter_iterator could forward arguments to constructors, like: for(it i = it("*.txt", "dir), e; i != e; ++i) But without a way to separate arguments to functor and to underlying iterator this will only work for a case of one argument for each. Well, I guess I should stop dreaming and get to work. - Volodya