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