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