Appearance
创建
js
// 父目录 a 必须存在
fs.mkdir('a/b', err => {
console.log(err)
})
// 目录 a 和 目录 a 下的目录 b 必须存在
fs.mkdir('a/b/c', err => {
console.log(err)
})是否是文件夹
js
// 只有儿子那一层
fs.readdir('a', (err, dirs) => {
dirs.forEach(dir => {
const _path = path.join('a', dir)
fs.stat(_path, (err, stat) => {
const isFile = stat.isFile()
const isDirectory = stat.isDirectory()
console.log(isFile, isDirectory)
if (isFile) {
// 删除文件
fs.unlink(_path, () => {})
}
})
return _path
})
})删除
删除目录是需要保证目录中的内容是空的,a 下不能有任何东西,包括目录。因此后续遍历先把孩 子内的删除。
js
const fs = require('fs')
const path = require('path')
// 同步删除文件夹
const rmdirSync = (parentDir) => {
const dirs = fs.readdirSync(parentDir)
if (!dirs.length) {
// 没有任何内容
fs.rmdirSync(parentDir)
return
}
for (let i = 0, l = dirs.length; i < l; i++) {
const dir = dirs[i]
const _path = path.join(parentDir, dir)
const stat = fs.statSync(_path)
const isFile = stat.isFile()
if (isFile) {
// 删除文件
fs.unlinkSync(_path)
} else {
// 看看文件夹里有没有内容
rmdirSync(_path)
}
}
fs.rmdirSync(parentDir)
}js
// a
// b.js c
// e
// f.js
const rmdir = (parentDir, cb) => {
fs.stat(parentDir, (err, stat) => {
const isFile = stat.isFile()
if (isFile) {
// 回调中尝试删除父目录,如果该文件是最后一项才能成功删除。
fs.unlink(parentDir, cb)
} else {
fs.readdir(parentDir, (err, dirs) => {
if (dirs.length === 0) {
// 回调中删除父目录
fs.rmdir(parentDir, cb)
}
for (let i = 0, l = dirs.length; i < l; i++) {
const dir = dirs[i]
const _path = path.join(parentDir, dir)
rmdir(_path, () => {
if (i === l - 1) {
// 子目录已经清空,删除父目录。
fs.rmdir(parentDir, cb)
}
})
}
})
}
})
}