Я делаю рекурсивную прогулку по каталогам, чтобы вносить изменения в файлы. Моя функция файла изменений требует полного пути к файлу, чтобы иметь возможность делать вещи. Однако то, что моя программа делает прямо сейчас, это просто получить имя текущего файла или папки, но не полный путь.Получение полного пути к файлу во время рекурсивного перемещения файла C
Мой подход заключается в том, что я сделал бы строку и сохраняю приложенные имена до тех пор, пока не получу полный путь. Однако, поскольку я делаю рекурсию, у меня возникают проблемы с передачей строки, чтобы добавить к ней больше строк.
Это мой код:
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
void recursiveWalk(const char *pathName, char *fullPath, int level) {
DIR *dir;
struct dirent *entry;
if (!(dir = opendir(pathName))) {
fprintf(stderr, "Could not open directory\n");
return;
}
if (!(entry = readdir(dir))) {
fprintf(stderr, "Could not read directory\n");
return;
}
do {
if (entry->d_type == DT_DIR) { // found subdirectory
char path[1024];
int len = snprintf(path, sizeof(path)-1, "%s/%s", pathName, entry->d_name); // get depth
path[len] = 0;
// skip hidden paths
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
continue;
}
fprintf(stdout, "%*s[%s]\n", level*2, "", entry->d_name);
// Append fullPath to entry->d_name here
recursiveWalk(path, fullPath, level + 1);
}
else { // files
fprintf(stdout, "%*s- %s\n", level*2, "", entry->d_name);
//changeFile(fullPath);
}
} while (entry = readdir(dir));
closedir(dir);
}
int main(int argn, char *argv[]) {
int level = 0;
recursiveWalk(".", "", level);
return 0;
}
'recursiveWalk (шаблон, замена, путь, FULLPATH , level + 1); 'зачем давать здесь столько аргументов? – ameyCU
'char path [1024];'? Опасность, Уилл Робинсон? – paulsm4
Не изменяйте имя переданного пути; сделайте копию его, добавьте в копию, оставьте исходный текст неповрежденным. –