Я делаю функцию, которая подсчитывает количество файлов в каталоге (включая подкаталоги и файлы внутри этого подкаталога).Например:
База / Dir 1 / Dir 1.1
Dir 1 имеет: hi.txt, hi2.txt
Dir 1.1 имеет: hi3.txt, hi4.txt, hi5.txt
Таким образом, вывод для количества файлов в Base должен быть 7 (игнорируя. и ..)
Вывод для количества файлов в Dir 1 должен быть 6
Вывод количества файлов в Dir 2 должен быть 3
Это то, что я пытался сделать.
void recorrido(const char *actual, int indent, int op, char * output,int numF)
{
DIR *dir;
struct dirent *entrada;
char path[PATH_MAX+1];
char path2[PATH_MAX+1];
if (!(dir = opendir(actual))){
return;
}
while ((entrada = readdir(dir)) != NULL)
{
if (entrada->d_type == DT_DIR) //Directory
{
if ((strcmp(entrada->d_name, ".") != 0) && (strcmp(entrada->d_name, "..") != 0)) //Ignore . and ..
{
strcpy(path, actual);
strcat(path, "/");
strcat(path, entrada->d_name);
recorrido(path, indent + 2,op,output,numF++);
printf("Number of files for %s is %d", path, numF);
}
}
}
else if (entrada->d_type != DT_DIR){ //just file
if (strcmp(actual, "") == 0){
strcpy(path2, "./");
strcat(path2, entrada->d_name);
strcpy(actual, path2);
}
else
{
strcpy(path2, actual);
strcat(path2, "/");
strcat(path2, entrada->d_name);
//printf("File path is %s\n",path2);
numF++;
}
}
closedir(dir);
}
У меня проблемы с печатью правильного количества файлов длякаждый каталог, если у меня есть 2 папки внутри базы (тест 1 и тест 2), он будет учитывать эти папки, но если у меня есть что-то внутри теста 1, он будет игнорироваться.