dirent struct处理的最大文件/目录数

dirent struct处理的最大文件/目录数,c,C,我有一个目录(我们称之为目录a),其中包含约15000个目录(B1,B2,…,B15000),B的每个目录都包含一个我要读取的文件(我们称之为“raw”)。 所以我想读: A/B1/原材料 A/B2/raw 我事先不知道B的目录名,但我知道A目录的名称,每个B的目录都有一个名为raw的文件 所以我使用dirent来打开dir A并移动其中的所有目录-提取d_name字段中包含的名称,但是在我读取264个目录的名称后,运行就停止了 我想知道struct dirent是否不能容纳超过264个目录?

我有一个目录(我们称之为目录a),其中包含约15000个目录(B1,B2,…,B15000),B的每个目录都包含一个我要读取的文件(我们称之为“raw”)。 所以我想读: A/B1/原材料 A/B2/raw

我事先不知道B的目录名,但我知道A目录的名称,每个B的目录都有一个名为raw的文件

所以我使用dirent来打开dir A并移动其中的所有目录-提取d_name字段中包含的名称,但是在我读取264个目录的名称后,运行就停止了

我想知道struct dirent是否不能容纳超过264个目录?有人能帮我吗

提前谢谢


[评论代码]

DIR* dRoot = opendir(argv[1]);
assert(dRoot != NULL);
struct dirent* dir;

while((dir = readdir(dRoot)))
{
    //suppose dirName is a string "argv[1]/dir->d_name/raw"
    FILE* file = fopen(dirName,"r");

    //do something

    fclose(file);
}

closedir(dRoot);
readdir()
为它返回指向的每个
struct dirent
分配内存。
dirent
closedir()
上自动解除分配,因此当您不再需要任何特定的
dirent
时,您不能
释放该内存,并且在
closedir()
之后,您不能使用任何
dirent
。我认为您的程序可能(尽管不太可能)无法为
dirent
s分配更多内存。
您可以在
readdir()之后检查
errno
以找到答案


如果这是问题所在,您可以改为使用
readdir\u r()
,它将
dirent*
用于您提供的分配(甚至可能是堆栈上的局部变量),并且您可以对所有
dirent
逐个重用它。
readdir\u r()
的一个警告是
struct dirent
的大小取决于文件系统,您需要确保您的分配足够大。

如何读取目录?你能给我们看一些代码吗?最好是a.DIR*dRoot=opendir(argv[1]);断言(dRoot!=NULL);结构方向*dir;while((dir=readdir(dRoot)){//假设dirName是一个字符串“argv[1]/dir->d_name/raw”FILE*FILE=fopen(dirName,r”);//做点什么fclose(FILE)}closedir(dRoot);我看到的是,虽然我没有浏览所有依赖dRoot的目录,但我还是跳出了这个循环!似乎“dir->d_name”在目录号264后包含NULL!我假设您检查了当前目录和父目录(名为
”。“
)?另外,程序的参数是什么(
argv[1]
)?是否检查文件是否正确打开(即
文件
不是
)?你检查它是一个目录而不是一个文件?如何创建和初始化
dirName
?问题不在于目录的数量。您可能在关闭文件时遇到问题;您的程序中的空间可能已用完;您可能没有检查是否已成功打开文件;你可能会遇到各种各样的问题。但是对于
readdir()
可以读取的目录大小没有具体的上限。