【问题标题】:C trouble with statC 统计问题
【发布时间】:2015-06-20 05:40:14
【问题描述】:

在我的程序中,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;

}

【问题讨论】:

  • 能否提供当前输出和预期输出?
  • 这一行:'perror("opendir()");'不会准确介绍打开目录的任何问题。这是因为对 printf() 的调用介于对 opendir() 的调用和对 perror() 的调用之间,而 printf() 可以修改 errno 的内容。
  • 谢谢 :) 我很困惑,因为我得到了当前目录的正确值,但现在我知道了 :)

标签: c stat


【解决方案1】:

cur->d_name 只包含文件名。

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

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

还需要检查readdir()返回的struct是否 是文件还是子目录。

【讨论】:

    【解决方案2】:

    主要问题是stat 需要一个文件路径,但d_name 只是文件名。您可以找到一个如何使用 statd_name here 的工作示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      相关资源
      最近更新 更多