Javascript 求和 foreach 内的目录大小

标签 javascript node.js foreach

每次调用 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/

相关文章:

Javascript 计算错误

javascript - 透明背景CSS绘制圆形边框动画

node.js - 如何获取我在node.js http请求中实际发送的http请求 header

javascript - 在没有反应插件的情况下使用 eslint-config-airbnb

php foreach里面for语句问题

javascript - 将 array.prototype.foreach() 的结果保存到一个 undefined variable 中

javascript - JavaScript 中的随机冒号是什么意思

javascript - 将 'Select All' 添加到 Bootstrap 多选表单/列表

node.js - Mongoose 栖息在哪里

java - for each 循环中 if 语句的返回值