gpt4 book ai didi

c - dirent 结构处理的最大文件/目录数

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:39 25 4
gpt4 key购买 nike

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

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

所以我使用 dirent 来打开目录 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() 上自动释放,因此当您不再需要任何内存时,您不能free() particular dirent,并且你不能在 closedir() 之后使用任何 dirent。我想您的程序可能(尽管不太可能)无法为 dirent 分配更多内存。
您可以在 readdir( ) 返回 NULL 以查找。

如果这是问题所在,您可以改用 readdir_r(),它使用 dirent* 分配给您提供的分配(甚至可以是堆栈),并且您可以一个接一个地为所有 dirent 重用它。 readdir_r() 的一个警告是 struct dirent 的大小取决于文件系统,您需要确保您的分配足够大。

关于c - dirent 结构处理的最大文件/目录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23033547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com