Почему у меня возникает ошибка при попытке рекурсивно перемещаться по каталогам в 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);
}