清空文件夹
- 👉先删除所有文件再删除空文件夹
- ✌同时删除文件和文件夹
👉先删除所有文件再删除空文件夹
因为删除文件夹操作必须保证文件夹为空,所以逻辑上会考虑到先清空文件夹中的所有文件,最后再删除这些空文件夹。
//加载需要用到的模块
const fs = require('fs')
const path = require('path')
//获取到命令行传入的参数
const pathName = process.argv[2]
console.log("删除中。。。")
// 清空文件夹中的文件
deleteFile(pathName)
// 删除空文件夹
dirdelete(pathName)
function deleteFile(pathNamedir) {
// 读取文件夹内容
const files = fs.readdirSync(pathNamedir)
// 遍历文件夹
files.forEach(function(file) {
// 将上级目录的路径和文件名拼接=当前文件的路径
const dirName = path.resolve(pathNamedir, file)
// console.log(dirName)
// 返回值可以判断文件类型
const stats = fs.lstatSync(dirName)
// console.log(stats.isDirectory())
// 如果是文件夹递归调用函数
if (stats.isDirectory()) {
deleteFile(dirName)
} else {
// 删除文件
fs.unlinkSync(dirName)
}
})
}
function dirdelete(filesName) {
// 读取文件夹
files = fs.readdirSync(filesName)
//判断文件夹为空
if (files.length == 0) {
// 删除文件夹
fs.rmdirSync(filesName)
// console.log(files.length)
}
// 判断文件夹不为空
if (files.length > 0) {
// 遍历文件夹
files.forEach(file => {
// console.log(file)
// 拼接路径
const fileName = path.resolve(filesName, file)
// 递归调用函数
dirdelete(fileName)
// console.log(num)
})
// console.log(files.length)
// 清空父文件夹中空子文件夹后删除父文件夹
if (files.length == 0) {
// console.log(filesName)
fs.rmdirSync(filesName)
}
}
}
- 代码中写有每一步详细的注释,不在多加赘述,分不清楚过程中的某些参数的值可以将我放在相应位置上注释的console.log打开,相信会对理解整个过程有帮助。
- 读取目录、删除文件夹、删除文件等操作都要用同步的API是因为,假如使用异步API处理文件,在未完全删除文件夹下所有文件时就会调用删除文件夹的API,这时文件夹不为空,导致删除失败
- 将删除文件和删除文件夹封装成函数便于处理目录下嵌套了多层文件夹的情况,通过递归调用覆盖到每一个子目录。使用时将需要删除文件夹的路径作为参数传进来即可。将需要操作的文件路径作为参数,js文件中可以通过process获取到
✌同时删除文件和文件夹
其实还可以将删除文件和删除文件夹整合,优化一下代码,同样实现清空文件夹功能。
const fs = require('fs')
const path = require('path')
//获取命令行传入的参数
const pathName = process.argv[2]
// 清空文件夹中的文件
deleteFile(pathName)
// 删除空文件夹
function deleteFile(pathNamedir) {
console.log("删除中。。。")
// 读取文件夹内容
const files = fs.readdirSync(pathNamedir)
// 遍历文件夹
files.forEach(function(file) {
// 将上级目录的路径和文件名拼接=当前文件的路径
const dirName = path.resolve(pathNamedir, file)
// console.log(dirName)
// 返回值可以判断文件类型
const stats = fs.lstatSync(dirName)
// console.log(stats.isDirectory())
// 如果是文件夹递归调用函数
if (stats.isDirectory()) {
deleteFile(dirName)
} else {
// 删除文件
fs.unlinkSync(dirName)
}
})
// 清空文件夹内容之后之后删除文件夹
fs.rmdirSync(pathNamedir)
}
个人练习使用的小demo,还有一篇文章记录的是文件复制的内容,可以将两者比较一下,感受一下复制和删除的相似和不同,这里是安全通道👉👉👉五分钟搞定,教你用node.js开发文件复制脚本