Просидев несколько дней за программой для копирования директторий на Linux, я всё таки дошел до понимания её логики. Тоесть нам для копирования дерева каталогов, нужно выполнять рекурсию по определению типа (каталог или папка), и для переноса файлов в новые создаваемые папки.
Вобщем вот он долгожданный код, но вылаживаю всеголишь его часть!!!
Не хватает копирования файлов, и чтение из других директорий !!!
Вобщем вот он долгожданный код, но вылаживаю всеголишь его часть!!!
static void dir_copy(char* src_path, char* dst_path) {
struct dirent *entry;
struct stat eStat;
DIR *src_dir;
char* realFileName = new char[MAX_PATH];
char temp[MAX_PATH], tempto[MAX_PATH];
strcpy(temp, src_path);
strcpy(tempto, dst_path);
lstat(src_path, &eStat);
if (S_ISDIR(eStat.st_mode)) {
mkdir(dst_path, 0777);
if (src_dir = opendir(src_path)) {
while ((entry = readdir(src_dir)) != NULL) {
if (strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0) {
continue;
}
strcpy(realFileName, src_path);
strcat(realFileName, "/");
strcat(realFileName, entry->d_name);
stat(realFileName, &eStat);
if (S_ISDIR(eStat.st_mode)) {
sprintf(temp, "%s/%s", src_path, entry->d_name);
sprintf(tempto, "%s/%s", dst_path, entry->d_name);
mkdir(tempto, 0777);
dir_copy(temp, tempto);
} else {
sprintf(temp, "%s/%s", src_path, entry->d_name);
sprintf(tempto, "%s/%s", dst_path, entry->d_name);
file_copy(temp, tempto);
}
}
closedir(src_dir);
}
} else {
sprintf(temp, "%s", src_path);
sprintf(tempto, "%s", dst_path);
file_copy(temp, tempto);
}
}
Не хватает копирования файлов, и чтение из других директорий !!!
Комментариев нет:
Отправить комментарий