В настоящее время у меня есть функция, которая будет проходить через каталог и печатать каждый файл в каждом каталоге.
void printdir(char *dir, int depth)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;
if ((dp = opendir(dir))==NULL)
{
fprintf(stderr, "cannot open director: %s\n", dir);
return;
}
chdir(dir);
while((entry = readdir(dp))!=NULL)
{
lstat(entry->d_name, &statbuf);
if(S_ISDIR(statbuf.st_mode))
{
if(strcmp(".", entry ->d_name)==0 || strcmp("..", entry->d_name) ==0)
continue;
printf("directory %*s%s/\n", depth, "", entry->d_name);
printdir(entry->d_name, depth+4, path);
}
else printf("file %*s/%s\n", depth, "",entry->d_name);
}
chdir("..");
closedir(dp);
}
Мне нужно отслеживать полное имя пути. Первоначально я делал это, имея строку malloc
char *path = malloc(sizeof(char)*500);
, а затем я помещал исходное имя файла (полученное от пользователя) в путь. Затем я сделал путь параметром, поэтому каждый раз, когда я открывал новый каталог, я добавлял имя в путь. Единственная проблема в том, что я не знаю, когда нужно «сбросить» путь, если это имеет смысл. Поэтому, если у меня есть каталог A с каталогом B, C, D, когда я ухожу в каталог B, мне нужно сбросить путь к «./directoryA», а затем добавить каталог C. В основном, если кто-нибудь может взглянуть на мой код и посмотреть, есть лиспособ отредактировать его, чтобы я мог отслеживать имя файла, это было бы очень полезно! Спасибо!