четверг, 3 февраля 2011 г.

Копирование директорий на С++.... проще наверно не бывает.

Просидев несколько дней за программой для копирования директторий на 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);
    }
}


Не хватает копирования файлов, и чтение из других директорий !!!

Комментариев нет:

Отправить комментарий