删除某一指定文件夹的实现方案

1、调用dirent.h实现
先判断当前文件夹是否存在,后调用接口删除,但是会由于权限问题删除失败。

#include <iostream>
#include <dirent.h>

bool directoryExists(const char* dirName) {
    
    
    DIR* dir = opendir(dirName);
    if (dir) {
    
    
        closedir(dir);
        return true;
    } else {
    
    
        return false;
    }
}

int main() {
    
    
    const char* directoryName = "/dev/shm/my_dir";
    if (directoryExists(directoryName)) {
    
    
        std::cout << "Directory exists" << std::endl;
    } else {
    
    
        std::cout << "Directory does not exist" << std::endl;
    }
    
    return 0;
}

2、调用unistd.h
没有编译选项指定,但是对于文件的root权限会删除失败。

#include <iostream>
#include <unistd.h>

bool removeDirectory(const char* dirName) {
    
    
    if (rmdir(dirName) == 0) {
    
    
        return true;
    } else {
    
    
        return false;
    }
}

int main() {
    
    
    const char* directoryName = "/dev/shm/my_dir";
    if (removeDirectory(directoryName)) {
    
    
        std::cout << "Directory removed successfully" << std::endl;
    } else {
    
    
        std::cout << "Failed to remove directory" << std::endl;
    }
    
    return 0;
}

3、调用cstdlib.h
该方式自动检查当前目录是否存在指定的文件夹,存在则删除,不存在不会返回失败。对于编译选项不需要指定,并且可删除root权限下的文件夹。不需要修改程序权限。最佳方案

#include <iostream>
#include <cstdlib>

int main() {
    
    
    std::string folderPath = "/dev/shm/my_directory";  // 指定要删除的文件夹路径

    std::string command = "sudo rm -rf " + folderPath;
    int result = std::system(command.c_str());

    if (result == 0) {
    
    
        std::cout << "Folder deleted successfully." << std::endl;
    } else {
    
    
        std::cerr << "Failed to delete the folder." << std::endl;
    }

    return 0;
}

4、调用fs系统删除
使用fs文件系统删除指定目录下的文件夹,通常需要在编译选项中添加编译选项:

g++ rmdir.cpp -std=c++17  -lstdc++fs

并且,通过该方式,再删除文件夹时,会因为root的权限问题引起删除失败。

#include <iostream>
#include <experimental/filesystem>

namespace fs = std::experimental::filesystem;

void removeDirectory(const std::string& dirPath) {
    
    
    fs::path directory(dirPath);
    if (fs::exists(directory) && fs::is_directory(directory)) {
    
    
        fs::remove_all(directory);
        std::cout << "Removed directory: " << dirPath << std::endl;
    } else {
    
    
        std::cout << "Directory does not exist or is not a directory" << std::endl;
    }
}

int main() {
    
    
    std::string directoryPath = "/dev/shm/my_directory";

    removeDirectory(directoryPath);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/neuzhangno/article/details/132410931