C:S_ISDIR工作不正常,只有“S”&引用;及"&引用;显示为目录

C:S_ISDIR工作不正常,只有“S”&引用;及"&引用;显示为目录,c,string,io,C,String,Io,出于某种原因,当我遍历一个目录中的所有文件/文件夹,并对照S_ISDIR检查我当前的选择时,它只对“.”和“.”目录有效。尽管我有3个文件(A、B、C)和2个文件夹(subdir、seconddir) 代码: 不知道我做错了什么…:(您必须首先确保opt_basedir是您当前的工作目录 你可以这样做 chdir(opt_basedir); directory = opendir("."); 而不是 directory = opendir(opt_basedir); 另一种方法是创建绝对路径

出于某种原因,当我遍历一个目录中的所有文件/文件夹,并对照S_ISDIR检查我当前的选择时,它只对“.”和“.”目录有效。尽管我有3个文件(A、B、C)和2个文件夹(subdir、seconddir)

代码:


不知道我做错了什么…:(

您必须首先确保
opt_basedir
是您当前的工作目录

你可以这样做

chdir(opt_basedir);
directory = opendir(".");
而不是

directory = opendir(opt_basedir);
另一种方法是创建绝对路径:

directory = opendir(opt_basedir);
/* error check */

while ((dirr = readdir(directory))) {
    char *path = malloc(strlen(opt_basedir) + strlen(dirr->d_name) + 1);
    /* error check */
    strcpy(path, opt_basedir);
    strcat(path, dirr->d_name);

    lstat(path, ...);
    /* other code */

    free(path);
}

这是一个完整的测试程序(注意:
readDir()
中的输出仅用于调试):

#包括
#包括
#包括
#包括
#包括
无效的
readDir(常量字符*路径)
{
DIR*dp;
结构方向*dr;
结构统计;
dp=opendir(路径);
如果(dp==NULL){
perror(“opendir”);
返回;
}
printf(“%s:\n”,路径);
而((dr=readdir(dp))){
如果(!strcmp(dr->d_name,“.”)| |!strcmp(dr->d_name,“…”)){
继续;
}
char*abs_path=malloc(strlen(path)+strlen(dr->d_name)+2);
如果(!abs_路径){
佩罗尔(“马洛克”);
退出(退出失败);
}
strcpy(abs_路径,path);
strcat(abs_路径“/”;
strcat(abs\u路径,dr->d\u名称);
if(lstat(abs_路径,&fs)<0){
自由(abs_路径);
继续;
}
if(S_ISDIR(fs.st_模式)){
readDir(abs_路径);
}
printf(“\t%s\n”,dr->d\u名称);
自由(abs_路径);
}
}
int
main(int argc,char*argv[])
{
如果(argc!=2){
fprintf(stderr,“用法:%s dir\n”,argv[0]);
退出(退出失败);
}
readDir(argv[1]);
退出(退出成功);
}

您必须首先确保
opt_basedir
是您当前的工作目录

你可以这样做

chdir(opt_basedir);
directory = opendir(".");
而不是

directory = opendir(opt_basedir);
另一种方法是创建绝对路径:

directory = opendir(opt_basedir);
/* error check */

while ((dirr = readdir(directory))) {
    char *path = malloc(strlen(opt_basedir) + strlen(dirr->d_name) + 1);
    /* error check */
    strcpy(path, opt_basedir);
    strcat(path, dirr->d_name);

    lstat(path, ...);
    /* other code */

    free(path);
}

这是一个完整的测试程序(注意:
readDir()
中的输出仅用于调试):

#包括
#包括
#包括
#包括
#包括
无效的
readDir(常量字符*路径)
{
DIR*dp;
结构方向*dr;
结构统计;
dp=opendir(路径);
如果(dp==NULL){
perror(“opendir”);
返回;
}
printf(“%s:\n”,路径);
而((dr=readdir(dp))){
如果(!strcmp(dr->d_name,“.”)| |!strcmp(dr->d_name,“…”)){
继续;
}
char*abs_path=malloc(strlen(path)+strlen(dr->d_name)+2);
如果(!abs_路径){
佩罗尔(“马洛克”);
退出(退出失败);
}
strcpy(abs_路径,path);
strcat(abs_路径“/”;
strcat(abs\u路径,dr->d\u名称);
if(lstat(abs_路径,&fs)<0){
自由(abs_路径);
继续;
}
if(S_ISDIR(fs.st_模式)){
readDir(abs_路径);
}
printf(“\t%s\n”,dr->d\u名称);
自由(abs_路径);
}
}
int
main(int argc,char*argv[])
{
如果(argc!=2){
fprintf(stderr,“用法:%s dir\n”,argv[0]);
退出(退出失败);
}
readDir(argv[1]);
退出(退出成功);
}

您必须首先确保
opt_basedir
是您当前的工作目录

你可以这样做

chdir(opt_basedir);
directory = opendir(".");
而不是

directory = opendir(opt_basedir);
另一种方法是创建绝对路径:

directory = opendir(opt_basedir);
/* error check */

while ((dirr = readdir(directory))) {
    char *path = malloc(strlen(opt_basedir) + strlen(dirr->d_name) + 1);
    /* error check */
    strcpy(path, opt_basedir);
    strcat(path, dirr->d_name);

    lstat(path, ...);
    /* other code */

    free(path);
}

这是一个完整的测试程序(注意:
readDir()
中的输出仅用于调试):

#包括
#包括
#包括
#包括
#包括
无效的
readDir(常量字符*路径)
{
DIR*dp;
结构方向*dr;
结构统计;
dp=opendir(路径);
如果(dp==NULL){
perror(“opendir”);
返回;
}
printf(“%s:\n”,路径);
而((dr=readdir(dp))){
如果(!strcmp(dr->d_name,“.”)| |!strcmp(dr->d_name,“…”)){
继续;
}
char*abs_path=malloc(strlen(path)+strlen(dr->d_name)+2);
如果(!abs_路径){
佩罗尔(“马洛克”);
退出(退出失败);
}
strcpy(abs_路径,path);
strcat(abs_路径“/”;
strcat(abs\u路径,dr->d\u名称);
if(lstat(abs_路径,&fs)<0){
自由(abs_路径);
继续;
}
if(S_ISDIR(fs.st_模式)){
readDir(abs_路径);
}
printf(“\t%s\n”,dr->d\u名称);
自由(abs_路径);
}
}
int
main(int argc,char*argv[])
{
如果(argc!=2){
fprintf(stderr,“用法:%s dir\n”,argv[0]);
退出(退出失败);
}
readDir(argv[1]);
退出(退出成功);
}

您必须首先确保
opt_basedir
是您当前的工作目录

你可以这样做

chdir(opt_basedir);
directory = opendir(".");
而不是

directory = opendir(opt_basedir);
另一种方法是创建绝对路径:

directory = opendir(opt_basedir);
/* error check */

while ((dirr = readdir(directory))) {
    char *path = malloc(strlen(opt_basedir) + strlen(dirr->d_name) + 1);
    /* error check */
    strcpy(path, opt_basedir);
    strcat(path, dirr->d_name);

    lstat(path, ...);
    /* other code */

    free(path);
}

这是一个完整的测试程序(注意:
readDir()
中的输出仅用于调试):

#包括
#包括
#包括
#包括
#包括
无效的
readDir(常量字符*路径)
{
DIR*dp;
结构方向*dr;
结构统计;
dp=opendir(路径);
如果(dp==NULL){
perror(“opendir”);
返回;
}
printf(“%s:\n”,路径);
而((dr=readdir(dp))){
如果(!strcmp(dr->d_name,“.”)| |!strcmp(dr->d_name,“…”)){
继续;
}
char*abs_path=malloc(strlen(path)+strlen(dr->d_name)+2);
如果(!abs_路径){
佩罗尔(“马洛克”);
退出(退出失败);
}
strcpy(abs_路径,path);
strcat(abs_路径“/”;
strcat(abs\u路径,dr->d\u名称);
if(lstat(abs_路径,&fs)<0){
自由(abs_路径);
继续;
}
if(S_ISDIR(fs.st_模式)){
readDir(abs_路径);
}
printf(“\t%s\n”,dr->d\u名称);
自由(abs_路径);
}
}
int
main(int argc,char*argv[])
{
如果(argc!=2){
fprintf(标准,“用法:%s dir\n”,argv[0