将打开的目录作为参数传递
Passing opened dir as argument
我有 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 directory
”的 C 程序)。
实际上一切正常,但我不想打开 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 中的递归函数:
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 directory
”的 C 程序)。
实际上一切正常,但我不想打开 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;
}