Is node.js rmdir recursive ? Will it work on non empty directories?

后端 未结 22 1813
清歌不尽
清歌不尽 2021-01-31 13:41

The documentation for fs.rmdir is very short and doesn\'t explain the behavior of rmdir when the directory is not empty.

Q: What happens if I try to use

22条回答
  •  感动是毒
    2021-01-31 13:44

    I wrote about this problem exactly.

    My previous solution below, while simple, is not preferred. The following function, is a Synchronous solution; while async might be preferred.

    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);
        }
    };
    

    [Edit] Added lstat instead of stat to prevent errors on symlinks

    [Previous Solution]

    My solution to this is quite easy to implement.

    var exec = require('child_process').exec,child;
    child = exec('rm -rf test',function(err,out) { 
      console.log(out); err && console.log(err); 
    });
    

    This is slimmed down for this page, but the basic idea is simple; execute 'rm -r' on the command line. If your app needs to run across different types of OS, put this in a function and have an if/else/switch to handle it.

    You will want to handle all the responses; but the idea is simple enough.

提交回复
热议问题