DirEntries range seems impractical with foreach

Spacen Jasset spacenjasset at mailrazer.com
Tue Mar 18 01:54:48 PDT 2014


On Monday, 17 March 2014 at 20:39:45 UTC, anonymous wrote:
> On Monday, 17 March 2014 at 09:18:36 UTC, Spacen Jasset wrote:
>> While trying to use dirEntries range with foreach I 
>> encountered a seemingly unsurmountable problem. The problem is 
>> that an execption is thrown while calling .front() on the 
>> range that dirEntries returnes, which seems to mean it's 
>> impossible to use it with a for loop if you exepect any sort 
>> of 'access denied' or other file exception - which will be 
>> quite common. e.g. in c:\windows
>>
>> Is there any way to fix the foreach loop version (a)
>>
>>
>> (a) Can't make this work
>> foreach (DirEntry e; entries) {
>>
>>    }
>> std.file.FileException at std\file.d(2262): 
>> c:/windows\CSC\v2.0.6: Access is denied
>>
>>
>> (b)This works
>>    auto entries = dirEntries(path, spanMode);
>>    while (!entries.empty) {
>>        try {
>>            DirEntry e = entries.front();
>>            //...
>>            entries.popFront();
>>        } catch (FileException e) {
>>            writeln("Skipping something");
>>        }
>>    }
>
> b doesn't work in the general case, either. dirEntries throws
> immediately when the very first entry is not accessible.


I see. I raised a bug on this issue 
https://d.puremagic.com/issues/show_bug.cgi?id=12391 Perhaps 
there are some other libraries ideas that can be used.





More information about the Digitalmars-d-learn mailing list