2014-09-21 59 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

相關問題