On Wednesday, 23 January 2013 at 16:10:57 UTC, H. S. Teoh wrote:
On Wed, Jan 23, 2013 at 04:52:25PM +0100, monarch_dodra wrote:
On Wednesday, 23 January 2013 at 15:24:02 UTC, Josh wrote:
>On Wednesday, 23 January 2013 at 15:00:16 UTC, bearophile
>wrote:
>>A possible solution: desugar the foreach range iteration
>>protocol of dirEntries and wrap the relevant method with a
>>try-catch.
>
>Sorry, could you explain that a little? I'm not sure what
>desugar
>means :/
He means you turn it into a normal loop with !empty, front and
popFront.
[SNIP]
That wouldn't really work anyways. Why you'd be able to catch
the
exception when calling popFront, and preserve your iteration
state,
you'd be unable to iterate past the exception point :/
Yeah, I think we might need an enhancement request to add a
flag to
ignore access errors while traversing the filesystem.
T
As a workaround, one can manually and recursively iterate the
files with a "shallow" span. The result would be a depth first
iteration.
//----
void foo(string s)
{
writeln(s);
if (!s.isDir()) return;
try
{
foreach(string dir; dirEntries(s, SpanMode.shallow))
{
foo(dir);
}
}
catch {}
}
void main()
{
foo(`C:\\`);
}
//----