iterate over a directory, dealing with permission errors

Robert burner Schadek via Digitalmars-d digitalmars-d at puremagic.com
Fri Sep 18 04:54:29 PDT 2015


On Friday, 18 September 2015 at 11:35:45 UTC, John Colvin wrote:
> Posting here instead of learn because I think it uncovers a 
> design flaw
>
> void main(string[] args)
> {
>     import std.file : dirEntries, SpanMode;
>     import std.stdio : writeln;
>     foreach(file; dirEntries(args[1], SpanMode.depth))
>         writeln(file.name);
> }
>
> Modify this program such that it will print "<file.name> access 
> denied" instead of crashing with an exception whenever it hits 
> a permissions problem. Remember that you might not even have 
> permission to read the directory given in args[1]. Remember 
> that access permissions can change at any time.
>
> It can be done, but it is seriously ugly.

http://dlang.org/phobos/std_exception.html#.handle

foreach(file; dirEntries(args[1], SpanMode.depth)
         .handle!(Exception, RangePrimitive.front, (e, r) => 
DirEntry())) {
     writeln(file.name);
}

change Exception to the Exception Type to handle and select the 
throwing range primitive (RangePrimitive). Then just supply a 
delegate that does the actual handling.
This will not break any range chain!


More information about the Digitalmars-d mailing list