首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >node.js rmdir是递归的吗?它能在非空目录上工作吗?

node.js rmdir是递归的吗?它能在非空目录上工作吗?
EN

Stack Overflow用户
提问于 2012-09-28 02:10:11
回答 23查看 79.2K关注 0票数 81

fs.rmdir的文档非常简短,没有解释当目录不为空时rmdir的行为。

Q:如果我尝试使用此接口删除非空目录,会发生什么情况?

EN

回答 23

Stack Overflow用户

回答已采纳

发布于 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节。

票数 39
EN

Stack Overflow用户

发布于 2013-05-17 17:05:36

尽管我使用了第三方库来做这样的事情,但我想不出一个更优雅的解决方案。所以我最终使用了npm-module rimraf

安装它

代码语言:javascript
复制
npm install rimraf

或者安装它并保存到'package.json‘(其他保存选项可以在npm-install文档中找到)

代码语言:javascript
复制
npm install --save rimraf

然后,您可以执行以下操作:

代码语言:javascript
复制
rmdir = require('rimraf');
rmdir('some/directory/with/files', function(error){});

或者在Coffeescript中:

代码语言:javascript
复制
rmdir = require 'rimraf'
rmdir 'some/directory/with/files', (error)->
票数 96
EN

Stack Overflow用户

发布于 2012-10-07 01:09:49

I wrote about this problem exactly

下面是我之前的解决方案,虽然简单,但不是首选。以下函数是一个同步解决方案;而异步可能是首选。

代码语言:javascript
复制
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,以防止符号链接上出现错误

以前的解决方案

我对此的解决方案很容易实现。

代码语言:javascript
复制
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/开关来处理它。

您将希望处理所有的响应;但是这个想法非常简单。

票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12627586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档