在使用opendir()获得DIR*之后,我需要使用readdir()读取结构目录并将其存储到数组中。
为了计算数组的大小,我可以循环遍历并计算条目数然后,我可以分配数组,然后再次循环以读取和存储结构目录。
但是,我想知道是否有更好的方法来获取dir条目的数量?
最佳答案
重新定位可能是最好的方法下面是一个示例(为演示目的选择较小的分配大小)。未执行错误检查在循环的最后,direntArray有货物,count告诉您有多少。
#define num_to_alloc 10
int main(int argc, const char * argv[])
{
struct dirent *direntArray = NULL;
DIR *myDir = opendir("/tmp");
int count = 0;
int max = 0;
struct dirent *myEnt;
while ((myEnt = readdir(myDir))){
if ( count == max ){
max += num_to_alloc;
direntArray = realloc(direntArray, max * sizeof(struct dirent));
}
memcpy(&direntArray[count], myEnt, sizeof(struct dirent));
count++;
}
return 0;
}