Plan de implementación para eliminar una carpeta específica

1. Llame a dirent.h para implementarlo.
Primero determine si la carpeta actual existe y luego llame a la interfaz para eliminarla. Sin embargo, la eliminación fallará debido a problemas de permisos.

#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. Llamar a unistd.h
sin especificar las opciones de compilación no eliminará el permiso de raíz del archivo.

#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. Llame a cstdlib.h para
verificar automáticamente si la carpeta especificada existe en el directorio actual. Si existe, elimínela. Si no existe, no se devolverá la falla. No es necesario especificar opciones de compilación y las carpetas con permisos de raíz se pueden eliminar. No es necesario modificar los permisos del programa. la mejor solucion

#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. Llame al sistema fs para eliminar.
Utilice el sistema de archivos fs para eliminar la carpeta en el directorio especificado. Por lo general, necesita agregar opciones de compilación a las opciones de compilación:

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

Además, al eliminar la carpeta mediante este método, la eliminación fallará debido a problemas de permisos de 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;
}

Supongo que te gusta

Origin blog.csdn.net/neuzhangno/article/details/132410931
Recomendado
Clasificación