我正在寻找一种方法来删除包含node.js文件的文件夹?
我知道有一种方法可以使用fs.rmdir()删除空文件夹,我尝试使用提供函数的npm rimraf模块" rm -rf" for node.js
socket.on("end", function (data) {
rimraf("./a/b/c", function(err){
if(err){
console.log(err);
}
});
});
但我一直收到这个错误。
{ [Error: ENOTEMPTY: directory not empty, rmdir './a/b/c']
errno: -39,
code: 'ENOTEMPTY',
syscall: 'rmdir',
path: './a/b/c' }
所以我尝试了另一种解决这个问题的方法,首先我清空目录,然后删除目录
socket.on("end", function (data) {
rimraf("./a/b/c/*", function(err){
if(err){
console.log(err);
}else{
fs.rmdir("./a/b/c")
}
});
});
然后我收到此错误
Error: ENOTEMPTY: directory not empty, rmdir './a/b/c'
at Error (native)
我检查了文件夹,rimraf删除了文件,但我不知道为什么我仍然在使用fs.rmdir()时出错。
编辑: 我查找了一个名为fs-extra的不同模块,并想出了这个。
fse.emptyDir("a/b/c/", function(err){
if(err){
console.log(err);
} else {
console.log("doneaaaa")
fse.remove("a/b/c",function(err){
if(err){
console.log(err);
} else {
console.log('doneaswell');
}
});
}
});
现在我收到了这个错误:
doneaaaa
{ [Error: EBUSY: resource busy or locked, unlink 'a/b/c/.nfs000000002ab5000d00000072']
errno: -16,
code: 'EBUSY',
syscall: 'unlink',
path: 'a/b/c/.nfs000000002ab5000d00000072' }
正如你所看到的那样,我得到了删除文件夹中文件的函数的第一部分,但是当它删除文件夹时,它会抛出EBUSY错误。
提前谢谢!
答案 0 :(得分:0)
要同步删除它:
var fs = require('fs');
var deleteFolderRecursive = function(path) {
if( fs.existsSync(path) ) {
fs.readdirSync(path).forEach(function(file,index){
var curPath = path + "/" + file;
if(fs.lstatSync(curPath).isDirectory()) { // recurse
deleteFolderRecursive(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
};
答案 1 :(得分:0)
关于EBUSY
错误,请做一件事。在尝试删除文件夹之前,请执行console.log(process.cwd())
以查看Node进程所在的目录。如果Node在尝试删除的文件夹中,则它将发出EBUSY
错误。我在正在开发的Node.js应用程序中遇到了这种情况。解决方案是在尝试删除目录之前,将目录(process.chdir(new directory)
)更改为我要删除的目录以外的其他目录,问题已解决。顺便说一下,这是在Windows上发生的。