每次调用 forEach
时,我都无法增加变量。
目标是通过对目录中所有文件的大小求和来获取目录的总大小。我遇到的问题是正确理解应该将变量放在哪里,以便计算出正确的大小。
事实上,目前计算的大小是单个文件的大小,而不是总大小。我缺少什么?
function walk(dir) {
let
n = 0,
size = 0,
totalSize = 0;
function walk(dir) {
fs.readdirSync(dir).forEach(file => {
let fullPath = path.join(dir, file);
totalSize += size; //Total size ; should it be here ?
++n;
console.log(size);
if (fs.lstatSync(fullPath).isDirectory()) {
--n;
walk(fullPath);
} else {
size = fs.statSync(fullPath).size; // Get size of file
listFiles.write(size + "\n"); // Write file size into copyList.xml
}
});
}
return walk(dir);
}
当前输出:
340747217
18607
283163346
25332
287107119
22240
281853153
219100996
204879388
210185951
26321
278784426
21899
22695
238503727
29866
266805926
21697
285134805
最佳答案
您在错误的地方计算了总大小,并且计算方式也是错误的。 size = + size
不会将新尺寸添加到现有值中。使用新变量来累计总大小。(totalSize
)
function walk(dir) {
let n = 0,
size = 0;
totalSize = 0;
function walk(dir) {
fs.readdirSync(dir).forEach(file => {
let fullPath = path.join(dir, file);
++n;
if (fs.lstatSync(fullPath).isDirectory()) {
--n;
walk(fullPath);
} else {
size = fs.statSync(fullPath).size; // Get size of file
totalSize += size; // Calculate total size
listFiles.write(size + "\n"); // Write file size into copyList.xml
}
});
}
return walk(dir);
}
关于Javascript 求和 foreach 内的目录大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50305633/