Performance Issue
Azi Hassan via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Sep 6 11:21:44 PDT 2017
On Wednesday, 6 September 2017 at 15:11:57 UTC, Vino.B wrote:
> On Wednesday, 6 September 2017 at 14:38:39 UTC, Vino.B wrote:
> Hi Azi,
>
> The required out is like below
>
> [31460] - Array 1 for folder 1(all files in Folder 1) of the
> FS C:\\Temp\\TEST1\\BACKUP
> [1344448] - Array 2 for folder 2(all files in Folder 2) of the
> FS C:\\Temp\\TEST1\\BACKUP
> [2277663, 2277663] - Array 3 for folder 1(all files in Folder
> 1) of the FS C:\\Temp\\TEST2\\EXPOR
> [31460] - Array 4 for folder 2(all files in Folder 2) the FS
> C:\\Temp\\TEST2\\EXPORT
I tried to create a similar file structure on my Linux machine.
Here's the result of ls -R TEST1:
TEST1:
BACKUP
TEST1/BACKUP:
FOLDER1
FOLDER2
TEST1/BACKUP/FOLDER1:
file1
file2
file3
TEST1/BACKUP/FOLDER2:
b1
b2
And here's the output of ls -R TEST2 :
TEST2:
EXPORT
TEST2/EXPORT:
FOLDER1
FOLDER2
TEST2/EXPORT/FOLDER1:
file2_1
file2_2
file2_3
TEST2/EXPORT/FOLDER2:
export1
export2
export3
export4
This codes output the sizes in the format you described :
import std.algorithm: filter, map, fold, each;
import std.parallelism: parallel;
import std.file: SpanMode, dirEntries, DirEntry;
import std.stdio: writeln;
import std.typecons: tuple;
import std.path: globMatch;
import std.array;
void main () {
auto Filesys = ["TEST1/BACKUP", "TEST2/EXPORT"];
ulong[][] sizes;
foreach(FFs; Filesys)
{
auto dFiles = dirEntries(FFs, SpanMode.shallow).filter!(a =>
a.isDir).map!(a => a.name);
foreach (d; dFiles) {
sizes ~= dirEntries(d, SpanMode.depth).map!(a => a.size).array;
}
}
sizes.each!writeln;
}
It outputs the sizes :
[6, 6, 6]
[8, 8]
[8, 8, 8]
[9, 9, 9, 9]
Note that there's no need to store them in ulong[][] sizes, you
can display them inside the loop by replacing `sizes ~=
dirEntries(d, SpanMode.depth).map!(a => a.size).array;` with
`dirEntries(d, SpanMode.depth).map!(a => a.size).joiner(",
").writeln;`
To make sure that it calculates the correct sizes, I made it
display the paths instead by making "sizes" string[][] instead of
ulong[][] and by replacing map!(a => a.size) with map!(a =>
a.name) in the second foreach loop :
import std.algorithm: filter, map, each;
import std.file: SpanMode, dirEntries, DirEntry;
import std.stdio: writeln;
import std.array : array;
void main () {
auto Filesys = ["TEST1/BACKUP", "TEST2/EXPORT"];
string[][] sizes;
foreach(FFs; Filesys)
{
auto dFiles = dirEntries(FFs, SpanMode.shallow).filter!(a =>
a.isDir).map!(a => a.name);
foreach (d; dFiles) {
sizes ~= dirEntries(d, SpanMode.depth).map!(a => a.name).array;
}
}
sizes.each!writeln;
}
It outputs the paths as expected :
["TEST1/BACKUP/FOLDER1/file1", "TEST1/BACKUP/FOLDER1/file2",
"TEST1/BACKUP/FOLDER1/file3"]
["TEST1/BACKUP/FOLDER2/b1", "TEST1/BACKUP/FOLDER2/b2"]
["TEST2/EXPORT/FOLDER1/file2_3", "TEST2/EXPORT/FOLDER1/file2_1",
"TEST2/EXPORT/FOLDER1/file2_2"]
["TEST2/EXPORT/FOLDER2/export2", "TEST2/EXPORT/FOLDER2/export3",
"TEST2/EXPORT/FOLDER2/export1", "TEST2/EXPORT/FOLDER2/export4"]
More information about the Digitalmars-d-learn
mailing list