copendir()
函数是用于复制一个目录及其子目录和文件的
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
int copendir(const char *src, const char *dest) {
DIR *src_dir, *dest_dir;
struct dirent *entry;
int result;
// 打开源目录
src_dir = opendir(src);
if (!src_dir) {
perror("opendir");
return -1;
}
// 创建目标目录
result = mkdir(dest, 0777);
if (result < 0) {
perror("mkdir");
closedir(src_dir);
return -1;
}
// 复制目录内容
while ((entry = readdir(src_dir)) != NULL) {
// 过滤特定目录,例如只复制 "dir1" 和 "dir2"
if (strcmp(entry->d_name, "dir1") == 0 || strcmp(entry->d_name, "dir2") == 0) {
char src_entry[PATH_MAX];
char dest_entry[PATH_MAX];
snprintf(src_entry, sizeof(src_entry), "%s/%s", src, entry->d_name);
snprintf(dest_entry, sizeof(dest_entry), "%s/%s", dest, entry->d_name);
// 如果是目录,则递归复制
if (entry->d_type == DT_DIR) {
result = copendir(src_entry, dest_entry);
if (result < 0) {
perror("copendir");
closedir(src_dir);
return -1;
}
} else {
// 复制文件
result = copyfile(src_entry, dest_entry);
if (result < 0) {
perror("copyfile");
closedir(src_dir);
return -1;
}
}
}
}
// 关闭源目录
closedir(src_dir);
return 0;
}
在这个示例中,我们使用 strcmp()
函数来检查目录项的名称是否为 “dir1” 或 “dir2”。如果是,我们继续复制该目录项。你可以根据需要修改过滤条件。