4

基本上,这段代码为我提供了目录中文件的名称......但我需要获取它们的路径......我尝试使用函数 realpath()。但我猜我用错了(我在代码中显示了我想使用它的地方)。任何想法如何解决它?还有一件事:它只给了我子目录的名称,但基本上我也需要获取他们文件的路径。谢谢。

#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>

int main (int c, char *v[]) {
    int len, n;
    struct dirent *pDirent;
    DIR *pDir;
    int ecode=0;
    struct stat dbuf;
    for (n=1; n<c; n++){
        if (lstat(v[n], &dbuf) == -1){
            perror (v[n]);
            ecode ++;
        }
        else if(S_ISDIR(dbuf.st_mode)){
            printf("%s is a directory/n ", v[n]);
        }
        else{
            printf("%s is not a directory\n", v[n]);
        }
    }
    if (c < 2) {
        printf ("Usage: testprog <dirname>\n");
        return 1;
    }
    pDir = opendir (v[1]);
    if (pDir == NULL) {
        printf ("Cannot open directory '%s'\n", v[1]);
        return 1;
    }

    while ((pDirent = readdir(pDir)) != NULL) {
        // here I tried to use realpath()
        printf ("[%s]\n", realpath(pDirent->d_name));
    }
    closedir (pDir);
    return 0;
}
4

1 回答 1

2

您只需将第二个参数添加到 realpath,因为它需要一个缓冲区来写入。我建议您从 printf 语句中取出该行并给它自己的行。realpath()可以返回一个 char*,但它不是这样设计的。

#include <limits.h>       //For PATH_MAX

char buf[PATH_MAX + 1]; 
while ((pDirent = readdir(pDir)) != NULL) {
    realpath(pDirent->d_name, buf);
    printf ("[%s]\n", buf);
}

这似乎可以在我的系统上正确显示完整路径。

于 2013-10-28T22:28:51.857 回答