删除文件的子文件代码案例(在鸿蒙编译器中不报错的写法)
时间: 2024-09-13 15:15:29 浏览: 44
COSMIC编译器让代码在RAM中运行的方法
在鸿蒙编译器中删除文件及子文件,可以使用`os`模块提供的函数,比如`remove()`和`rmtree()`。下面是一个示例,展示如何递归删除目录及其内容:
```c++
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
// 静态检查函数,确保路径存在且可读
static int is_valid_path(const char* path) {
if (access(path, F_OK) == -1) {
return 0;
}
return 1;
}
void remove_files_recursively(const char* dir_path) {
if (!is_valid_path(dir_path)) {
perror("Invalid directory");
return;
}
// 使用DIR结构体遍历目录
DIR* dir = opendir(dir_path);
if (dir == NULL) {
perror("Error opening directory");
return;
}
struct dirent* entry;
while ((entry = readdir(dir))) {
if (strcmp(".", entry->d_name) != 0 && strcmp("..", entry->d_name) != 0) { // 避免遍历"."和".."
char full_entry_path[PATH_MAX];
snprintf(full_entry_path, PATH_MAX, "%s/%s", dir_path, entry->d_name);
if (entry->d_type == DT_DIR) { // 如果是目录
remove_files_recursively(full_entry_path); // 递归处理子目录
} else { // 如果是文件
if (unlink(full_entry_path) == -1 && errno != ENOENT) { // 不是空链接则尝试删除
perror("Error deleting file");
}
}
}
}
closedir(dir);
}
// 调用示例
int main() {
const char* path_to_delete = "/path/to/directory";
remove_files_recursively(path_to_delete);
if (errno == 0) {
printf("Directory and its contents deleted successfully.\n");
} else {
printf("Error occurred during deletion: %s\n", strerror(errno));
}
return 0;
}
阅读全文