【问题标题】:How to get list of folders in this folder?如何获取此文件夹中的文件夹列表?
【发布时间】:2011-01-15 10:35:55
【问题描述】:

如何获取该文件夹中的文件夹列表?

【问题讨论】:

标签: c++ winapi visual-c++


【解决方案1】:

FindFirstFileEx+FindExSearchLimitToDirectories.

WIN32_FIND_DATA fi;
HANDLE h = FindFirstFileEx(
        dir,
        FindExInfoStandard,
        &fi,
        FindExSearchLimitToDirectories,
        NULL,
        0);
if (h != INVALID_HANDLE_VALUE) {
    do {
        if (fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
            printf("%s\n", fi.cFileName);
    } while (FindNextFile(h, &fi));
    FindClose(h);
}

【讨论】:

  • FindExSearchLimitToDirectories 并不是真正可靠的解决方案。它只是一个咨询标志。例如,在我的带有 NTFS 的 Windows XP Pro SP3 系统上,它没有任何效果。见:stackoverflow.com/questions/2248911/…
  • 我希望有人会在使用此代码之前跟踪链接并阅读文档(其中说“如果文件系统不支持目录过滤,则此标志将被静默忽略。”)。不合理的期望?
  • I would expect that somebody would follow the links and read the documentation before using this code. Unreasonable expectation? 是的,是的。如果他们想通读文档和其他东西,那么为什么还要在这里问呢?直接提问的目的是直接获得答案,而不是整天搜索和阅读。
【解决方案2】:

如果你不能使用.NET & Managed code,你可以通过win32 api的

Here is an example 可以修改为仅获取文件夹。

(基本上如下检查:)

...
  TCHAR szDir = _T("c:\\"); // or wherever.
  HANDLE hFind = FindFirstFile(szDir, &ffd);
...
  do {
      if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
      {
         // your code on 'ffd'
      }
  } while (FindNextFile(hFind, &ffd) != 0);

【讨论】:

    【解决方案3】:

    您可以使用Boost

    或者,如果您不想要 Boost,您可以查看讨论替代选项的此线程。 http://www.gamedev.net/community/forums/topic.asp?topic_id=523375

    【讨论】:

      【解决方案4】:

      为获得最佳可移植性,请使用boost filesystem 库。对基于 UNIX 的系统使用 opendir()/readdir() 和朋友。

      【讨论】:

      • opendir() 等在 Windows 上使用 MinGW 对我来说工作得很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多