copendir()
函数是用于复制一个目录及其子目录和文件的
#include#include #include #include #include #include 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”。如果是,我们继续复制该目录项。你可以根据需要修改过滤条件。