Nodejs删除非空文件夹

Nodejs删除非空文件夹

###如何能使用nodejs原生的方法而不通过系统命令删除非空文件夹。 难到只能自己写递归删除?

13 回复

当然可以!在 Node.js 中删除非空文件夹(即包含子文件和子文件夹的文件夹)可以通过编写递归函数来实现。我们可以利用 fspath 模块来完成这一任务。

如何使用 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');

解释:

  1. 导入模块

    • fs 模块提供了许多用于文件系统操作的功能,如读取、写入、删除等。
    • path 模块用于处理和转换文件路径。
  2. 定义 deleteFolderRecursive 函数

    • 这个函数接收一个文件夹路径作为参数。
    • 使用 fs.existsSync(path) 检查该路径是否存在。
    • fs.readdirSync(path) 读取指定目录下的所有文件和子文件夹。
    • 对于每个文件或文件夹,检查其是否为文件夹。如果是文件夹,则递归调用 deleteFolderRecursive;如果是文件,则直接调用 fs.unlinkSync(curPath) 删除文件。
    • 在遍历完所有文件和子文件夹后,最后使用 fs.rmdirSync(path) 删除空文件夹本身。
  3. 调用函数

    • 调用 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 了

要使用 Node.js 原生方法删除非空文件夹,可以借助 fspath 模块来实现。这里提供一个简单的递归函数来删除文件夹及其所有内容。

示例代码

const fs = require('fs');
const path = require('path');

function rimraf(dirPath) {
    if (!fs.existsSync(dirPath)) {
        return;
    }
    
    fs.readdirSync(dirPath).forEach(entry => {
        const entryPath = path.join(dirPath, entry);
        
        if (fs.lstatSync(entryPath).isDirectory()) {
            rimraf(entryPath); // 递归删除子目录
        } else {
            fs.unlinkSync(entryPath); // 删除文件
        }
    });
    
    fs.rmdirSync(dirPath); // 删除空目录
}

// 使用示例
rimraf('/path/to/your/directory');

解释

  1. 引入模块

    • fs:文件系统模块,用于执行文件和目录的操作。
    • path:路径处理模块,帮助构建和解析文件路径。
  2. 定义递归函数 rimraf

    • 首先检查给定的目录是否存在。如果不存在,则直接返回。
    • 使用 fs.readdirSync 读取目录中的所有条目,并对每个条目进行操作。
      • 如果是目录,递归调用 rimraf 删除其内容。
      • 如果是文件,使用 fs.unlinkSync 删除文件。
    • 在删除完所有子目录和文件后,使用 fs.rmdirSync 删除空目录。
  3. 调用函数

    • 调用 rimraf 函数并传入要删除的目录路径。

这样,你就可以不依赖任何外部命令或库,仅使用 Node.js 原生 API 来安全地删除非空文件夹。

回到顶部