2014-09-21 50 views
0

我试图改变这种代码可以找到在指定的目录和国家特定的文件是否是一个文件或使用执行opendir目录( );如何找到一个给定的目录中的特定文件,并检查它是否是一个文件或其他目录

我一直在寻找如何现在要做的这一段时间,但我似乎无法找到或理解这样做的一个简单的方法。

#include <sys/types.h> 
#include <dirent.h> 
#include <stdio.h> 

int main(int argc, char *argv[]){ 
    DIR *dp; 
    struct dirent *dirp; 

    if(argc==1) 
     dp = opendir("./"); 
    else 
     dp = opendir(argv[1]); 

    while ((dirp = readdir(dp)) != NULL) 
     printf("%s\n", dirp->d_name); 

    closedir(dp); 
    return 0; 
} 
+0

发现_dir-path_ -name _ “文件” _ -print – BLUEPIXY 2014-09-21 04:28:07

+0

我不明白你在说什么,对不起。我在系统编程方面很新颖。你能详细解释一下吗? – user4062234 2014-09-21 04:31:03

+0

你不需要制作已经存在的东西。看到男人[发现](http://linux.die.net/man/1/find) – BLUEPIXY 2014-09-21 04:39:49

回答

0

使用stat文件名(这是级联的目录名和readdir返回的名称)。该while循环将看起来像在这里:

char *path = "./"; 
if (argc == 2) { 
    path = argv[1]; 
} 
dp = opendir(path); 

while ((dirp = readdir(dp)) != NULL) { 
    char buf[PATH_MAX + 1]; 
    struct stat info; 
    strcpy(buf, path); 
    strcat(buf, dirp->d_name); 
    stat(buf, &info); /* check for error here */ 
    if (S_ISDIR(info.st_mode)) { 
      printf("directory %s\n", dirp->d_name); 
    } else if (S_ISREG(info.st_mode)) { 
      printf("regular file %s\n", dirp->d_name); 
    } else { 
      /* see stat(2) for other possibilities */ 
      printf("something else %s\n", dirp->d_name); 
    } 
} 

您将需要包括一些额外的报头(sys/stat.hunistd.hstatstring.hstrcpystrcat在这个例子中)。

+0

你能解释一下你的意思是“使用统计文件名称”吗? – user4062234 2014-09-21 04:36:30

+0

传递文件名(相对于当前目录)'stat'功能。 – afenster 2014-09-21 04:39:14

+0

只注意到你处理的argv所规定的代码来列出所需的目录,而不仅仅是当前的一个。 – afenster 2014-09-21 04:44:15

相关问题