September 19, 2015
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
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
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
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
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

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.

May 23, 2021

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 RangePrimitive.pop or RangePrimitive.popFront?

I meant, RangePrimitive.front or RangePrimitive.popFront.

RangePrimitive.popFront

In SpanMode.depth I still get the FileException and in SpanMode.breadth, the program hangs for ever.

1 2
Next ›   Last »