Почему у меня возникает ошибка при попытке рекурсивно перемещаться по каталогам в C?

Это для проекта в моем классе op/sys. Моя конечная цель - рекурсивное копирование каталога.

Функция ниже вызывает segfault, когда он видит каталог. Я пока не использую функции для копирования. Я просто пытаюсь отключить навигацию. source - это каталог, по которому я перемещаюсь, а dest - это местозаполнитель.

это не соответствует стрелке, когда dp является каталогом.

static void clone(const char* source, const char* dest){
    DIR *dirp;
    struct dirent *dp;
    dirp = opendir(source);
    dp = readdir(dirp);
    while (dp != NULL){
        if (strcmp(dp->d_name, "..") && strcmp(dp->d_name, "."))
        switch (dp->d_type) {
            case DT_DIR:
                printf("dir: %s\n", dp->d_name);
                //saved for making copy
->              clone(dp->d_name, dest);
                break;
            default:
                printf("fil: %s\n", dp->d_name);
                break;
        }
        dp = readdir(dirp);
    }
    closedir(dirp);
}

редактировать:

Я ненавижу, когда провожу часами над проблемой, потом обращаюсь за помощью и сразу же заставляю ее работать. Ответ размещен ниже.

1 ответ

Я изменил его, чтобы передать полный путь для следующего каталога, а не относительный путь.

static void clone(const char* source, const char* dest){
    DIR *dirp;
    struct dirent *dp;
    dirp = opendir(source);
    dp = readdir(dirp);
    while (dp != NULL){
        char rsource[512];
        strcpy(rsource, source);
        strcat(rsource, "/");
        strcat(rsource, dp->d_name);

        if (strcmp(dp->d_name, "..") && strcmp(dp->d_name, "."))
        switch (dp->d_type) {
            case DT_DIR:
                printf("dir: %s\n", dp->d_name);
                //saved for making copy

                clone(rsource, dest);
                break;
            default:
                printf("fil: %s\n", dp->d_name);
                break;
        }
        dp = readdir(dirp);
    }
    closedir(dirp);
}
Другие вопросы по тегам