C 此函数不支持';在某些目录中无法正常工作

C 此函数不支持';在某些目录中无法正常工作,c,C,此函数应显示目录中的文件列表,但是, 它仅在C:\Users\“name”\Desktop中工作 在其他目录中以所有名称显示(目录) 我尝试过其他方法,但只有这一种有效(不知怎么的) #包括 #包括 #包括 #包括 int list(){ chars[50]; 结构方向*条目; printf(“为文件列表指定目录\n”); scanf(“%s”、&s); DIR*DIR=opendir(s); 文件*ff; if(dir){ printf(“\n\n******\n\n”); while((en

此函数应显示目录中的文件列表,但是, 它仅在C:\Users\“name”\Desktop中工作 在其他目录中以所有名称显示(目录) 我尝试过其他方法,但只有这一种有效(不知怎么的)

#包括
#包括
#包括
#包括
int list(){
chars[50];
结构方向*条目;
printf(“为文件列表指定目录\n”);
scanf(“%s”、&s);
DIR*DIR=opendir(s);
文件*ff;
if(dir){
printf(“\n\n******\n\n”);
while((entry=readdir(dir))!=NULL){
ff=(fopen(输入->d_名称,“r”);
如果(ff!=NULL){
printf(“%s\n”,条目->数据单元名称);
fclose(ff);
}
else if(ff==NULL){
printf(“%s(目录)\n”,条目->数据单元名称);
}
}
printf(“\n******\n”);
closedir(dir);
返回1;
}

如果检查
条目->d_name
的内容,您会发现它只包含文件名,而不包含完整路径。因此,当您尝试打开文件时,除非该文件存在于当前目录中,否则无法打开该文件。您需要构建完整路径并使用该路径打开该文件

char fullname[1024];
strcpy(fullname,s);
strcat(fullname,"\\");
strcat(fullname,entry->d_name);
ff = fopen(fullname, "r");

如果检查
entry->d_name
的内容,您会发现它只包含文件名,而不包含完整路径。因此,当您尝试打开该文件时,除非该文件存在于当前目录中,否则无法打开该文件。您需要构建完整路径并使用该路径打开该文件

char fullname[1024];
strcpy(fullname,s);
strcat(fullname,"\\");
strcat(fullname,entry->d_name);
ff = fopen(fullname, "r");

1024
更改为
PATH_MAX
-请参见
限制。h
@EdHeal奇怪地,它不再工作,看起来我们打算使用
pathconf
来查找正确删除的注释。将
1024
更改为
PATH_MAX
-请参见
限制。h
@EdHeal奇怪地,它不再工作,看起来像是我们打算使用
pathconf
查找valueRight-deleted注释。