We could use a hasExt function in std.path
spir
denis.spir at gmail.com
Fri Apr 1 14:24:38 PDT 2011
On 04/01/2011 11:03 PM, Andrej Mitrovic wrote:
> At least on Windows, as far as I know, the casing of a file extension doesn't come into play. But when comparing extensions, you have to be careful to lowercase the result of `getExt()`, for example:
>
> foreach (string name; dirEntries(curdir, SpanMode.shallow))
> {
> if (name.isFile&& name.getExt == "txt")
> {
> // do something
> }
> }
>
> If the extension is cased "tXt", the if block will not be entered. That's a silent bug in your code right there!
>
> I think we could use a function in Phobos that returns true if an extension of a file matches any number of strings passed to it (a range). And an extra argument could be a flag (enum) or a boolean which can set the case sensitivity to true, but is false by default, e.g.:
>
> bool hasExt(Range)(string fileName, Range exts, bool caseSensitive = false)
> {
> static if (isSomeString!Range)
> {
> if (caseSensitive)
> {
> if (exts == fileName.getExt)
> return true;
> }
> else
> {
> if (exts.tolower == fileName.getExt.tolower)
> return true;
> }
> }
> else
> {
> foreach (ext; exts)
> {
> if (caseSensitive)
> {
> if (ext == fileName.getExt)
> return true;
> }
> else
> {
> if (ext.tolower == fileName.getExt.tolower)
> return true;
> }
> }
> }
>
> return false;
> }
>
> foreach (string name; dirEntries(curdir, SpanMode.shallow))
> {
> if (name.isFile&& name.hasExt(["ini", "conf"]))
> {
> // do something
> }
> }
>
> Yes, that is a horrible implementation, but I can't be bothered with trying to make it nice and simple right now, I'm in a rush. Sorry. :)
>
> I often have to search for files that have a certain extension. Having to expand the code to the following becomes ugly real fast:
>
> foreach (string name; dirEntries(curdir, SpanMode.shallow))
> {
> if (name.isFile&& name.hasExt.tolower == "ini" ||
> name.hasExt.tolower == "conf"))
> {
> // do something
> }
> }
Would be nice eg to match a whole set of image formats at once (while also
caring for "uncased" matching). But why a range?
Denis
--
_________________
vita es estrany
spir.wikidot.com
More information about the Digitalmars-d-learn
mailing list