如何计算目录中存在的所有子目录?

  • 本文关键字:存在 子目录 何计算 计算 c
  • 更新时间 :
  • 英文 :


在此代码中,我从目录中获取所有子目录路径。它工作得很好,但我想添加更多的东西,那就是计算所有的子目录并打印它们。如何在这个函数中做到这一点。我使用count变量使其工作,但结果是这样的。

给出结果:

/home/runner/TestC1/file
15775232
/home/runner/TestC1/dsf
15775233
/home/runner/TestC1/main.c
15775234
/home/runner/TestC1/main
15775235

预期结果:

/home/runner/TestC1/file
/home/runner/TestC1/dsf
/home/runner/TestC1/main.c
/home/runner/TestC1/main
Counted: 4 subdirectories.

void listdir(void){
DIR *dir;
struct dirent *entry;
size_t count;
if (!(dir = opendir(path))) {  
perror ("opendir-path not found");
return;
}
while ((entry = readdir(dir)) != NULL) {  
char *name = entry->d_name;
if (entry->d_type == DT_DIR)  
if (!strcmp(name, ".") || !strcmp(name, ".."))
continue;
snprintf (path1, 100, "%s/%sn", path, name);
printf("%s", path1);
printf("%zun", count);
count++;
}
closedir (dir); 
}

你的代码有几个问题:

正如Thomas所说:

您没有初始化计数。然后在循环内打印

  1. 未将count初始化为0
  2. 在循环内打印。
  3. 你计数除了...之外的所有内容,而不检查它是文件还是目录

这是一个(希望)修复版本的代码

void listdir(void){
DIR *dir;
struct dirent *entry;
unsigned count = 0;
if (!(dir = opendir(path))) {  
perror ("opendir-path not found");
return;
}
while ((entry = readdir(dir)) != NULL) {  
char *name = entry->d_name;
if (entry->d_type == DT_DIR) {
if (!strcmp(name, ".") || !strcmp(name, ".."))
continue;
count++;
snprintf (path1, 100, "%s/%sn", path, name);
printf("%s", path1);
}
}
printf("nCounted: %u subdirectories.n", count);
closedir (dir); 
}

编辑:根据chux-ReinstateMonica的注释编辑我的代码

Minor:当unsigned count当然没问题时,size_t count没有什么理由。Size_t取决于内存,而不是文件空间。迂腐地可以使用uintmax_t。IAC,"% d"不是指定的与size_t匹配的说明符——从OP匹配的"%zu">

倒退了一步

最新更新