iterate over a directory, dealing with permission errors
John Colvin via Digitalmars-d
digitalmars-d at puremagic.com
Fri Sep 18 05:42:24 PDT 2015
On Friday, 18 September 2015 at 12:27:37 UTC, Robert burner
Schadek wrote:
> On Friday, 18 September 2015 at 12:17:25 UTC, John Colvin wrote:
>> That's neat, didn't know about std.exception.handle
>
> It is at least a year old. I created it because I had a range
> that threw, and there was nothing to keep a range going or
> reenter it.
>
>>
>> Unfortunately, I think there are two problems with your
>> solution:
>>
>> 1) DirIteratorImpl will throw on popFront, not front. I had to
>> look at source to find out. Is this a failure of documentation
>> or is it actually an implementation detail?
>
> That one is trivial RangePrimitive.popFront
>
> foreach(file; dirEntries(args[1], SpanMode.depth)
> .handle!(Exception, RangePrimitive.popFront, (e, r) =>
> DirEntry())) {
> writeln(file.name);
> }
Yes, but implicit in this being an OK solution for people is that
no-one ever reorganises the internals of DirIteratorImpl. I guess
One could use handle to deal with *all* the range primitives as a
defensive countermeasure.
>> 2) it doesn't cover the case where args[1] itself is
>> unreadable, because dirEntries will throw when it's created.
>
> well, creating a DirEntry is not a range operation. handle
> can't help you there.
Yup :(
More information about the Digitalmars-d
mailing list