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



好的,所以我遇到了一些问题。这是我的代码(在此之前调用的 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 的调用有关。我不完全确定如何适当地更改它。

lstat(dp->d_name, &stbuf);

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

您需要在目录前面加上路径(即您传递给opendir的内容)。

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

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

相关内容

  • 没有找到相关文章

最新更新