Nodejs删除非空文件夹
Nodejs删除非空文件夹
###如何能使用nodejs原生的方法而不通过系统命令删除非空文件夹。 难到只能自己写递归删除?
13 回复
当然可以!在 Node.js 中删除非空文件夹(即包含子文件和子文件夹的文件夹)可以通过编写递归函数来实现。我们可以利用 fs
和 path
模块来完成这一任务。
如何使用 Node.js 原生方法删除非空文件夹
示例代码:
const fs = require('fs');
const path = require('path');
function deleteFolderRecursive(path) {
if (fs.existsSync(path)) {
// 遍历并删除文件夹中的所有文件和子文件夹
fs.readdirSync(path).forEach((file, index) => {
const curPath = path + "/" + file;
if (fs.lstatSync(curPath).isDirectory()) { // 如果是文件夹,则递归删除
deleteFolderRecursive(curPath);
} else { // 删除文件
fs.unlinkSync(curPath);
}
});
// 最后删除空文件夹本身
fs.rmdirSync(path);
}
}
// 使用示例
deleteFolderRecursive('/path/to/your/folder');
解释:
-
导入模块:
fs
模块提供了许多用于文件系统操作的功能,如读取、写入、删除等。path
模块用于处理和转换文件路径。
-
定义
deleteFolderRecursive
函数:- 这个函数接收一个文件夹路径作为参数。
- 使用
fs.existsSync(path)
检查该路径是否存在。 fs.readdirSync(path)
读取指定目录下的所有文件和子文件夹。- 对于每个文件或文件夹,检查其是否为文件夹。如果是文件夹,则递归调用
deleteFolderRecursive
;如果是文件,则直接调用fs.unlinkSync(curPath)
删除文件。 - 在遍历完所有文件和子文件夹后,最后使用
fs.rmdirSync(path)
删除空文件夹本身。
-
调用函数:
- 调用
deleteFolderRecursive
函数,并传入需要删除的文件夹路径。
- 调用
这种方式避免了直接执行系统命令,完全依赖于 Node.js 的内置模块来完成文件夹的删除工作。这样不仅更加安全,也更易于跨平台运行。
写个递归,还不简单,再封装成模块。 要用的时候,直接导入->调用。
fs.rmdir(path, callback)
fs.rmdirSync(path)
注意: 其实只是用来删空目录的
Warning: ENOTEMPTY, directory not empty ‘dist/images’ Use --force to continue.
简单,就是效率不高
昨天我也遇到了这个问题。。。。只能自己写递归了。。参考司徒正美的博客也可以 http://www.cnblogs.com/rubylouvre/archive/2011/11/28/2264717.html
你们说得太复杂了
rm -rf directorytodelete 子进程执行这个命令就可以了,何必那么的累呢
请看原帖标题。
const fs=require("fs");
const co=require("zco");
let deleteDir=function(dir){
return co(function *(next) {
let [err,stat]=yield fs.stat(dir,next);
if(err){
return ;
}
if(stat.isFile()){
yield fs.unlink(dir,next);
return;
}
let [err1,list]=yield fs.readdir(dir,next);
for(let i=0;i<list.length;i++){
yield deleteDir(dir+"/"+list[i])(next);
}
yield fs.rmdir(dir,next);
return ;
})
}
为何不用fs-extra?
子进程完美解决~~
都不看内容。。
都不看前面的回复的么… https://www.npmjs.org/package/rimraf 这个模块就 ok 了