On Sunday, 23 May 2021 at 15:12:22 UTC, Mike Parker wrote:
>Are you calling it with RangePrimitive.pop
or RangePrimitive.popFront
?
I meant, RangePrimitive.front
or RangePrimitive.popFront
.
September 19, 2015 Re: iterate over a directory, dealing with permission errors | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dmitry Olshansky | On Friday, 18 September 2015 at 14:35:39 UTC, Dmitry Olshansky wrote:
> On 18-Sep-2015 15:03, Adrian Matoga wrote:
>> 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.
>>
>> https://github.com/D-Programming-Language/phobos/pull/931
>>
>> I had to move to some urgent stuff instead of improving the PR and later
>> I forgot about it. The discussion points out what not to do when solving
>> this issue. :)
>
> FYI
>
> https://github.com/D-Programming-Language/phobos/pull/2768
I came across the same problem a few years ago. I can't remember if a bug was raised. it would be very handy to document the way to get around this in the dirEntries pages, especially if it involves a little convolution.
|
May 23, 2021 Re: iterate over a directory, dealing with permission errors | ||||
---|---|---|---|---|
| ||||
Posted in reply to Meta | On Friday, 18 September 2015 at 13:53:45 UTC, Meta wrote:
> I think you could use std.exception.ifThrown in this case.
>
> foreach(file; dirEntries(args[1], SpanMode.depth)
> .ifThrown(DirEntry.init)
> .handle!(Exception, RangePrimitive.popFront, (e, r) => DirEntry()))
> {
> writeln(file.name);
> }
>
Hello, is it something that still works today ?
because I have an error :
"no property `ifThrown` for type `std.file.DirIterator"
same if I use handle! directly. Do I need to import some modules ?
|
May 23, 2021 Re: iterate over a directory, dealing with permission errors | ||||
---|---|---|---|---|
| ||||
Posted in reply to xray | On Sunday, 23 May 2021 at 13:29:26 UTC, xray wrote: > On Friday, 18 September 2015 at 13:53:45 UTC, Meta wrote: >> I think you could use std.exception.ifThrown in this case. > Hello, is it something that still works today ? > because I have an error : > > "no property `ifThrown` for type `std.file.DirIterator" > > same if I use handle! directly. Do I need to import some modules ? `std.exception.ifThrown` means `ifThrown` is in the `std.exception` module, so that's what you need to import. https://dlang.org/phobos/std_exception.html#ifThrown |
May 23, 2021 Re: iterate over a directory, dealing with permission errors | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Parker | On Sunday, 23 May 2021 at 14:03:19 UTC, Mike Parker wrote:
> On Sunday, 23 May 2021 at 13:29:26 UTC, xray wrote:
>> On Friday, 18 September 2015 at 13:53:45 UTC, Meta wrote:
>>> I think you could use std.exception.ifThrown in this case.
>
>> Hello, is it something that still works today ?
>> because I have an error :
>>
>> "no property `ifThrown` for type `std.file.DirIterator"
>>
>> same if I use handle! directly. Do I need to import some modules ?
>
> `std.exception.ifThrown` means `ifThrown` is in the `std.exception` module, so that's what you need to import.
>
> https://dlang.org/phobos/std_exception.html#ifThrown
Thanks Mike. Now I have a
"The error handler's return value(DirEntry) does not have a common type with the expression(DirIterator)."
So I removed the ifThrown for while and it compiles....but still doesn't work because of an access denied file (FileException).
I thought the exception will be caught be the closure.
|
May 23, 2021 Re: iterate over a directory, dealing with permission errors | ||||
---|---|---|---|---|
| ||||
Posted in reply to xray | On Sunday, 23 May 2021 at 14:33:10 UTC, xray wrote: > On Sunday, 23 May 2021 at 14:03:19 UTC, Mike Parker wrote: >> On Sunday, 23 May 2021 at 13:29:26 UTC, xray wrote: >>> On Friday, 18 September 2015 at 13:53:45 UTC, Meta wrote: > Thanks Mike. Now I have a > "The error handler's return value(DirEntry) does not have a common type with the expression(DirIterator)." Well, the post you initially replied to did say this: > Although I'm not exactly sure what to return for the "error" value... I'm not sure if DirEntry.init will work or not; you'll probably have to mess around with it. It's not something I've had to look into before, so I have nothing useful for you at the moment. > > So I removed the ifThrown for while and it compiles....but still doesn't work because of an access denied file (FileException). > > I thought the exception will be caught be the closure. Are you calling it with `RangePrimitive.pop` or `RangePrimitive.popFront`? |
May 23, 2021 Re: iterate over a directory, dealing with permission errors | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Parker | On Sunday, 23 May 2021 at 15:12:22 UTC, Mike Parker wrote: >Are you calling it with I meant, |
May 23, 2021 Re: iterate over a directory, dealing with permission errors | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Parker | On Sunday, 23 May 2021 at 15:13:31 UTC, Mike Parker wrote: >On Sunday, 23 May 2021 at 15:12:22 UTC, Mike Parker wrote: >Are you calling it with I meant, RangePrimitive.popFront In SpanMode.depth I still get the FileException and in SpanMode.breadth, the program hangs for ever. |