使用dirent不再工作计算C中目录中的文件数。

时间:2015-05-02 07:13:15

标签: c file struct dirent.h

 DIR *ptr;  
    struct dirent *ent, ent2;
    int n=0, i=0;
    dir = ".";

    ptr = opendir(dir);
    while((ent = readdir(ptr)) != NULL) 
        { 
            if(ent -> d_type != DT_DIR)
            { 
                n++;
            }       
        }   

    char array[n][100];

    while((ent2 = readdir(ptr)) != NULL) 
        { 
            if(ent2 -> d_type != DT_DIR)
            { 
                strcpy(array[i], ent2 -> d_name);      
                i++;
            }       
        }   

在上面的C代码中,我试图计算工作目录中不包括文件夹的文件数。然后使用count来声明一个double char数组,然后用于存储文件名。 我需要知道double数组知道文件的数量。(不允许声明一个大数组)。当我声明具有大尺寸的double数组并且只是将文件名复制到它而没有任何计数时,代码工作正常。 据我所知,变量ent在第一个while循环中被改变。这就是我使用不同的" struct dirent ent2"的原因。

1 个答案:

答案 0 :(得分:6)

问题不在于使用相同的变量来存储readdir的结果 - 这完全没问题。

您的问题是readdir每次调用时都会提升您DIR *的位置。一旦看到所有文件,该目录指针就不能再进展了。它不会循环回到开头。

您可以使用rewinddir将其重置为目录中的第一个条目。 (或者关闭它并重新打开它。)