【问题标题】:Get list of directories in C获取 C 中的目录列表
【发布时间】:2012-07-24 22:18:24
【问题描述】:

我不得不相信这个问题一定已经被回答过多次了,但我找不到。使用 Visual Studio C(不是 C++ 或 C#),如何获取另一个目录中的目录列表?我试过搜索“获取目录列表”和“获取文件夹列表”和“在目录中查找文件夹”。

有人可以告诉我 1) 实际上得到一个目录列表和 2) 我在选择搜索词时做错了什么,我无法找到我认为应该是一个相对常见的问题。

【问题讨论】:

  • 我认为this 与您将得到的差不多。

标签: c visual-studio-2010 directory


【解决方案1】:

NTDLS 的回答应该可以解决您的问题:
Listing directory contents using C and Windows

您必须更改函数以便跳过文件,但这不应该是问题。如果不想列出子目录的所有文件夹:在 if 语句中省略递归调用。

【讨论】:

    【解决方案2】:

    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|");
    }
    

    【讨论】:

    • 这将列出所有目录条目,而不仅仅是 OP 要求的目录本身的目录条目。在 *nix 上,您可以在每个目录条目上使用 stat(2) 来确定其类型(目录或其他)。我敢肯定 Windows 上也有类似的东西(甚至可能是 stat(2) 本身)。
    • 这在 VS2010 C(控制台应用程序)中不起作用,因为该环境中没有等效的 dirent.h 文件。
    • @Giel 包含这个文件怎么样 linux.die.net/include/sys/stat.h ?,找到它:linux.die.net/man/2/stat ?是这个吗?
    • @JoeDF:如果 可用于您的编译器,并且很有可能正常工作。可能与具有 POSIX 兼容性库的 MinGW 一起使用,但对于 VSC,我真的不知道(我上次使用那是 2005 年)。
    猜你喜欢
    • 2013-11-18
    • 2011-04-22
    • 2017-01-18
    • 2012-04-07
    • 1970-01-01
    • 2010-09-12
    • 2020-05-04
    相关资源
    最近更新 更多