与stat有关的麻烦

时间:2015-06-19 20:48:06

标签: c stat

在我的程序中,stat仅适用于当前目录。任何人都可以帮助我。

即使我从main传递参数,它只适用于当前目录。 和源路径是好的,它是打印从主要传递的正确路径。

    DIR *dr;
    struct dirent *cur;
    struct stat fi;
    long int total_size = 0;
    dr = opendir(source);
    char *name;
    printf("%s\n\n\n", source);
    if (!(dr))
    {
       perror("opendir()");
       return(1);
    }

    while (cur = readdir(dr))
    {
        if(cur->d_name[0] != '.')
        {
            if(stat(cur->d_name, &fi) == -1)
            {
                printf("error \n\n");
            }
            else
            {
                printf("%s  ",cur->d_name);
                printf("%ld  ",fi.st_blocks);
                total_size = total_size + fi.st_blocks;
            }
        }
    }
    printf("\n\ntotal_size = %ld \n", total_size);
    printf("\n\n\n");
    return 0;

}

2 个答案:

答案 0 :(得分:2)

cur-> d_name仅包含文件名。

获得' stat()'在当前目录之外,

需要以路径字符串作为前缀。

还需要检查readdir()返回的结构是否 是一个文件或子目录。

答案 1 :(得分:0)

主要问题是stat需要文件路径,但d_name只是文件名。您可以在stat here

中找到有关如何使用d_name的有效示例