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!