On 4/10/23 6:43 PM, ikelaiah wrote:
On Monday, 10 April 2023 at 01:01:59 UTC, Steven Schveighoffer wrote:
On 4/9/23 9:16 AM, Ali Çehreli wrote:

   auto entries = dirEntries(/* ... */).array;

I'd be cautious of that. I don't know what the underlying code uses, it may reuse buffers for e.g. filenames to avoid allocation.

If you are confident the directory contents won't change in that split-second, then I think iterating twice is fine.


Steve,

The Rmd files are not on a network drive, but saved locally.
So, I'm confident, the files won't change in a split-second.

That is not what I meant.

What I mean is that `array` is going to copy whatever values the range gives it, which might be later *overwritten* depending on how `dirEntries` is implemented.

e.g. the following code is broken:

```d
auto lines = File("foo.txt").byLine.array;
```

But the following is correct:

```
auto lines = File("foo.txt").byLineCopy.array;
```

Why? Because `byLine` reuses the line buffer eventually to save on allocations. The array of lines might contain garbage in the earlier elements as they got overwritten.

I'm not saying it's wrong for `dirEntries`, I haven't looked. But you may want to be cautious about just using `array` to get you out of trouble, especially for lazy input ranges.

-Steve

Reply via email to