使用Nodejs計算文件夾中所有文件的大小


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)
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM