week-two
v1.0.0
Published
```
Downloads
3
Readme
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新建文件夹