删除非空目录

删除非空目录

//因为是先读取完信息 再进行删除 是有先后顺序的 需要等前边运行完 
//才能进行后边的事情  所以用同步
let fs = require('fs');

let path = require('path');

let pathurl = path.resolve('bb'); // 将文件解析为绝对路径

function fun(dir) {
    // console.log(dir);
    //读取文件目录 
    let file = fs.readdirSync(dir) 
    console.log(file);//Array(4) ["a", "a.txt", "b", "cc"]

    //对file进行遍历 item代表的是值  index代表的是索引值
    file.forEach((item, index) => {
        //每一个item的绝对路径
        let files = path.resolve(dir, item)
        console.log(files); // files的绝对路径
        let pathstat = fs.statSync(files);//文件状态

        let type = pathstat.isFile();   //判断files是否为文件
        console.log(type);  //是文件 返回true  不是文件返回false
        if (type == true) {
            console.log("删除文件:" + files); //删除文件
            fs.unlinkSync(files); //为true即为文件 可以直接用unlink删除
        } else {
            //如果type为false时
            //为false即为目录(文件夹) rmdirSync只能删除空目录(文件夹);
            //所以要再进行判断  再一次调用fun函数;
            fun(files);
        }
        fs.rmdirSync(files); //删除目录(文件夹)
        console.log('删除的目录为:' + files);
    })
}
fun(pathurl)
### 直接删除空目录是否会出错 在大多数编程语言和操作系统中,直接删除空目录会出错。例如在 C 语言里,`rmdir()` 函数只能删除空目录,若尝试用它删除空目录,操作会失败,函数返回 -1 并可通过 `perror()` 输出错误信息[^1]。 ### 直接删除空目录的影响 若强制直接删除空目录(如使用一些不当的操作或权限绕过),会导致目录及其包含的所有文件和子目录永久丢失,且这种丢失通常不可恢复,可能造成数据的重大损失。 ### 操作方法 #### C 语言 C 语言中要删除空目录,需使用递归方法,先删除目录内的文件和子目录,使目录变为空后再删除。示例代码如下: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <dirent.h> void remove_directory(const char *path) { DIR *dir = opendir(path); if (!dir) { perror("opendir"); return; } struct dirent *entry; while ((entry = readdir(dir)) != NULL) { if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { continue; } char sub_path[1024]; snprintf(sub_path, sizeof(sub_path), "%s/%s", path, entry->d_name); if (entry->d_type == DT_DIR) { remove_directory(sub_path); } else { if (unlink(sub_path) == -1) { perror("unlink"); } } } closedir(dir); if (rmdir(path) == -1) { perror("rmdir"); } } int main() { const char *directory = "test_dir"; remove_directory(directory); return 0; } ``` #### PHP PHP 中可通过自定义递归函数删除空目录,示例代码如下: ```php function delDir($directory) { if (file_exists($directory)) { if ($dir_handle = @opendir($directory)) { while ($filename = readdir($dir_handle)) { if ($filename != '.' && $filename != '..') { $subFile = $directory . "/" . $filename; if (is_dir($subFile)) { delDir($subFile); } if (is_file($subFile)) { unlink($subFile); } } } closedir($dir_handle); rmdir($directory); } } } delDir("mydir"); ``` #### 操作系统命令 在 Linux 或 macOS 系统中,可使用 `rm -rf` 命令直接删除空目录,但该命令有一定危险性,使用时需谨慎,因为它会强制递归删除目录及其所有内容。例如: ```bash rm -rf /path/to/your/directory ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值