gpt4 book ai didi

c - 传递打开的目录作为参数

转载 作者:行者123 更新时间:2023-11-30 17:22:52 25 4
gpt4 key购买 nike

我在 C 中有递归函数:

void dir(char *file_name, char *dir_name) {
DIR *f=opendir(dir_name);
if(f==NULL)
perror(dir_name);
else {
struct dirent *a;
while((a=readdir(f))!=NULL) {
if(strcmp(a->d_name,".")!=0 && strcmp(a->d_name,"..")!=0 && a->d_type==4) {
char s1[250];
strcpy(s1,dir_name);
if(s1[strlen(s1)-1]!='/')
strcat(s1,"/");
strcat(s1,a->d_name);
if(strcmp(a->d_name,file_name)==0)
{
printf("%s\n",s1);
n++;
}
dir(file_name,s1);
}
else
{
if(strcmp(a->d_name,file_name)==0)
{
n++;
}
}
}
closedir(f);
}
}

它实际上做了什么:它在“dir_name”及其子文件夹中查找“file_name”,并计算“file_name”在该层次结构中出现的次数。

我只是在 main() 中调用它,如 dir(argv[1],argv[2]); (一些带有参数“./program_name file_to_find.txt 目录”)。

实际上一切都很完美,但我不想打开 void dir() 内的目录。我希望它在 main() 中打开,并将其数据作为参数传递给 dir() (因此参数 char *dir_name )应该进行修改。

有没有办法做这样的事情(将打开的目录作为参数传递给函数)?

最佳答案

其实很简单

void dir(DIR *f, char *file_name, char *dir_name)
{
struct dirent *a;
int n = 0;

while ((a = readdir(f)) != NULL)
{
if (strcmp(a->d_name,".") != 0 && strcmp(a->d_name,"..") != 0 && a->d_type == 4)
{
char s1[250];
DIR *next;

strcpy(s1, dir_name);
if (s1[strlen(s1) - 1] != '/')
strcat(s1, "/");
strcat(s1, a->d_name);

if (strcmp(a->d_name, file_name) == 0)
{
printf("%s\n",s1);
n++;
}

next = opendir(s1);
if (next != NULL)
{
dir(next, file_name, s1);
closedir(next);
}
}
else
{
if (strcmp(a->d_name, file_name) == 0)
{
n++;
}
}
}
}

int main(int argc, char **argv)
{
DIR *f;

if (argc < 3)
return -1;

f = opendir(argv[2]);
if (f != NULL)
{
dir(f, argv[1], argv[2]);
closedir(f);
}
return 0;
}

关于c - 传递打开的目录作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27827850/

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