ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用Nodejs计算文件夹中所有文件的大小

2021-07-25 02:32:12  阅读:296  来源: 互联网

标签:文件 fs const err Nodejs 文件夹 let dirPath path


fs和path

NodeJS中的fs模块专门用于处理文件,path模块用于处理路径

利用这两个模块就可以自己实现对文件夹中所有文件大小的计算

同步计算方法

const fs=require('fs')
const path=require('path')

// 同步计算,利用回调函数和递归来完成多层级目录中的文件大小计算
function calcSizeSync(dirPath,cb){
    let fileSize=0
    let error=null
    function calc(dirPath,cb1){
        const statObj=fs.statSync(dirPath)
        if(statObj.isDirectory()){
            try {
                const files=fs.readdirSync(dirPath)
                let dirs=files.map(item=>{
                    return path.join(dirPath,item)
                })
                let index = 0
                function next () {
                  if (index < dirs.length) return cb1&&cb1()
                  let current = dirs[index++]
                  calc(current, next)
                }
                next()
            } catch (err) {
                error=err
            }
            
        }else{
            fileSize+=statObj.size
            cb1&&cb1()
        }
    }
    calc(dirPath)
    cb(error,fileSize)
}

异步计算方法,使用async/await

const fs=require('fs')
const path=require('path');
// 使用promisify方法来promise化指定方法
const { promisify } = require('util');
stat=promisify(fs.stat)
readdir=promisify(fs.readdir)

// 异步
async function calcSize(dirPath,cb){
    let fileSize=0;
    let error=null
    async function calc(dirPath){
        try {
            const statObj=await stat(dirPath)
            if(statObj.isDirectory()){
                const files=await readdir(dirPath)
                let dirs=files.map(item=>{
                    return path.join(dirPath,item)
                })
                let index = 0
                async function next () {
                    if (index < dirs.length){
                        let current = dirs[index++]
                        await calc(current)
                        await next()
                    }
                }
                return await next()
            }else{
                fileSize+=statObj.size
            }
        } catch (err) {
            error=err
        }
    }
    await calc(dirPath)
    cb(error,fileSize)
}

测试

calcSize('test',(err,size)=>{
    if(err) console.log(err)
    else console.log("异步执行文件大小:"+size)
})
calcSizeSync('test',(err,size)=>{
    if(err) console.log(err)
    else console.log("同步执行文件大小:"+size)
})

标签:文件,fs,const,err,Nodejs,文件夹,let,dirPath,path
来源: https://www.cnblogs.com/MissSage/p/15056944.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有