fs.rmdir的文档非常简短,没有解释当目录不为空时rmdir的行为。
Q:如果我尝试使用此接口删除非空目录,会发生什么情况?
发布于 2012-09-28 07:19:48
简而言之: node.js fs.rmdir()
调用POSIX rmdir()
;这将删除一个空目录,或者返回一个错误。在给定的情况下,调用将调用回调函数并将错误作为异常传递。
这里的问题是node.js文档引用了POSIX
Node.js API Docs API最初是这样启动的:
标准
函数的简单包装器。
这几乎将问题更改为:Is there a listing of the POSIX API / functions?的副本
对fs.rmdir
的描述很简洁,但也足够了。
异步rmdir(2)。
这里的rmdir(2)
是对rmdir() system call
文档的隐式引用。这里的数字(2)是一个旧的unix手册页约定,表示包含内核接口的手册页的第2节。
发布于 2013-05-17 17:05:36
尽管我使用了第三方库来做这样的事情,但我想不出一个更优雅的解决方案。所以我最终使用了npm-module rimraf。
安装它
npm install rimraf
或者安装它并保存到'package.json‘(其他保存选项可以在npm-install文档中找到)
npm install --save rimraf
然后,您可以执行以下操作:
rmdir = require('rimraf');
rmdir('some/directory/with/files', function(error){});
或者在Coffeescript中:
rmdir = require 'rimraf'
rmdir 'some/directory/with/files', (error)->
发布于 2012-10-07 01:09:49
I wrote about this problem exactly。
下面是我之前的解决方案,虽然简单,但不是首选。以下函数是一个同步解决方案;而异步可能是首选。
deleteFolderRecursive = function(path) {
var files = [];
if( fs.existsSync(path) ) {
files = fs.readdirSync(path);
files.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);
}
};
编辑添加了lstat而不是stat,以防止符号链接上出现错误
以前的解决方案
我对此的解决方案很容易实现。
var exec = require('child_process').exec,child;
child = exec('rm -rf test',function(err,out) {
console.log(out); err && console.log(err);
});
在此页面中,这是精简的,但基本思想很简单;在命令行上执行'rm -r‘。如果您的应用程序需要跨不同类型的操作系统运行,请将其放入一个函数中,并使用If /else/开关来处理它。
您将希望处理所有的响应;但是这个想法非常简单。
https://stackoverflow.com/questions/12627586
复制相似问题