C - 打开并读取目录,然后确定文件类型

时间:2012-07-02 16:06:26

标签: c stat opendir readdir

好吧,所以我遇到了一些问题。这是我的代码(在此之前调用的opendir()):

while( (dp = readdir(dfd)) != NULL ) {
        if( strcmp(dp->d_name, ".") == 0 ||  strcmp(dp->d_name, "..") == 0)
            continue;

        lstat(dp->d_name, &stbuf);

        printf("%s: ", dp->d_name);

        if( S_ISDIR(stbuf.st_mode) )
            puts("Directory");
        else if ( S_ISREG(stbuf.st_mode) )
            puts("File");
        else if ( S_ISCHR(stbuf.st_mode) )
            puts("Character Device");
        else if ( S_ISBLK(stbuf.st_mode) )
            puts("Block Device");
        else if ( S_ISFIFO(stbuf.st_mode) )
            puts("Fifo");
        else if ( S_ISLNK(stbuf.st_mode) )
            puts("Link");
        else
            puts("Socket");
    }
    return;
}

我正在阅读目录并确定文件类型的内容。唯一的问题是,这将始终打印“目录”,我相信它与调用lstat有关。我不确定如何适当地改变它。

2 个答案:

答案 0 :(得分:4)

lstat(dp->d_name, &stbuf);

Thing is dp->d_name仅包含文件的名称,而不包含完整路径。所以它可能会失败,但你不会注意到,因为你没有测试它的返回值。

您需要预先添加目录的路径(即传递给opendir的内容)。

答案 1 :(得分:3)

我可以看到两个值得关注的明显原因:

  1. 你没有建立正确的道路。除非您目录中(即您执行了opendir(".")),否则您将错误的路径传递给lstat()。您需要将目录的名称与每个文件的名称连接起来。打开目录并不意味着将其作为当前目录。
  2. 在检查其返回值之前,您没有检查lstat()是否成功。