2012-07-24 74 views
1

我不得不相信這個問題必須已經被多次解答,但是我找不到它。使用Visual Studio C(不是C++或C#),如何獲取另一個目錄中的目錄列表?我試過搜索「獲取目錄列表」和「獲取文件夾列表」和「在目錄中查找文件夾」。獲取C中的目錄列表

有人能告訴我1)實際上得到一個目錄列表和2)我在做我的選擇錯誤的搜索條件,我無法找到我認爲應該是一個相對頻繁的問題。

+0

我認爲[this](http://msdn.microsoft.com/en-us/library/aa365200%28VS.85%29.aspx)與您即將獲得的差不多。 – 2012-07-24 22:22:36

回答

0

NTDLS答案應該解決您的問題:
Listing directory contents using C and Windows

你必須改變該函數可以跳過這些文件,但這不應該成爲問題。如果您不想列出子目錄的所有文件夾:在if語句中省略遞歸調用。

0

EX:編譯爲Dirc.exe, 用法:DIRC -d [目錄]

#include <stdio.h> 
#include <dirent.h> 

int main(); 
void get_args(); 
void help(); 

void get_args(int argc, char** argv) 
{ 
    int i; 
     for (i = 1; i < argc; i++) { 

      if (argv[i][0] == '-') { 

       switch (argv[i][1]) { 

     case 'd': for (i = 2; i < argc; i++){ 
       struct dirent *dp; 
         DIR *dfd = opendir(argv[i]); 
         if(dfd != NULL) { 
         while((dp = readdir(dfd)) != NULL) 
        printf("%s\n", dp->d_name); 
         closedir(dfd); 
         } 
       } 
       break; 

     default:  
     fprintf(stderr, 
       "\nERROR: Unknown switch %s\n", argv[i]); 
       help(); 
     } 

     } else { 
       for (i = 1; i < argc; i++){ 
       printf("%s ", argv[i]);} 
      } 
    } 
} 

int main(int argc, char** argv) 
{ 
     get_args(argc, argv); 
     if (argc==1){ help();} 
} 

void help() 
{ 
    printf("\n Usage: dirc.exe [Arguments] [Dir]\n"); 
    printf(" Example: dirc -y words\n"); 
    printf("\n Arguments:"); 
     printf("\n -d |Directory|"); 
} 
+0

這將列出所有的目錄條目,而不僅僅是OP所要求的目錄本身。在* nix上,您可以在每個目錄條目上使用stat(2)來確定其類型(目錄或其他)。我確定Windows上有類似的東西(甚至可能是stat(2)本身)。 – Giel 2012-07-24 22:38:59

+1

這在VS2010 C(控制檯應用程序)中不起作用,因爲在該環境中沒有等效的dirent.h文件。 – PaeneInsula 2012-07-24 22:44:30

+0

@Giel包括這個文件http://linux.die.net/include/sys/stat.h?,找到它:http://linux.die.net/man/2/stat?這是一個嗎? – 2012-07-24 22:44:59