1.0.0 • Published 4 years ago

week-two v1.0.0

Weekly downloads
2
License
ISC
Repository
-
Last release
4 years ago

week

//引入模块
const fs=require('fs');
const path=require('path');

//读取文件夹
const readFile=(dir)=>{
    //获取路径的扩展名
    if(path.extname(dir)){
        //如果是文件
        return {
                name:path.basename(dir),//获取文件名
                type:'file',//文件
                size:fs.statSync(dir).size,//文件大小
        }
    }
    else{
        //如果是文件夹
        return{
                name:path.basename(dir),
                type:'dir',//文件夹
                //遍历获取子文件                 v子文件
                children:fs.readdirSync(dir).map(v=>{
                    return readFile(path.join(dir,v))//拼接文件 
            })
        }
    }
}

//如果是文件,就读取文件内容,并写入到同级目录下,文件名和读取文件名相同
const writeFile = (fromPath,content)=>{
    return new Promise((resolve,reject)=>{
        //异步写入                    err报错
        fs.writeFile(fromPath,content,(err)=>{
            //判断是否存在报错
            if(err){
                reject('失败')
                return;
            }
            else{
                resolve('成功')
            }
        })
    })
}

//如果是文件夹,就在一个新的路径下,创建一个同名称的目录
//使用async/await结合promise实现同步方式读取
const fun = async (a,b)=>{
    //判断是否是文件
    if(path.extname(a)){
        let str = fs.readFileSync(a)
        await writeFile(b,str)
    }else{
        fs.mkdirSync(b) 
        fs.readdirSync(a).map(v=>{
            fun(path.join(a,v),path.join(b,v))
        })
    }
}
fun('a','b')//a已存在的文件夹  b新建文件夹