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

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

我经常使用以下链接作为参考win 32 api,因为我自己正在学习c++:http://msdn.microsoft.com/en-us/library/aa383749(VS.85).aspx,但是我会在函数名称中逻辑地寻找单词“directories”,但我什么也没看到。不过这是个好问题! :-) - REA_ANDREW
以下似乎展示了几种实现你想要做的事情的方法 http://www.gamedev.net/community/forums/topic.asp?topic_id=177400&whichpage=1&#1075806 - REA_ANDREW
2
超多重复的问题,包括 https://dev59.com/8XVC5IYBdhLWcg3wZwPj#306917,根本停不下来。 - anon
@Neil:不,这个问题和这些标签都不是为了这个。可以看到正确答案的关键词(FindExSearchLimitToDirectories)只在SO上出现了一次。 - MSalters
4个回答

10

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

2
FindExSearchLimitToDirectories并不是一个可靠的解决方案。它只是一个建议性标志。例如,在我的Windows XP Pro SP3系统上,使用NTFS文件系统时它没有任何效果。请参见:https://dev59.com/skvSa4cB1Zd3GeqPiO3r - Ash
我希望有人能够跟随链接并阅读文档(其中写着“如果文件系统不支持目录过滤,则此标志会被静默忽略”),然后再使用这段代码。这个期望是不合理的吗? - ephemient
2
我希望有人在使用这段代码之前能够跟随链接并阅读文档。这是不合理的期望吗?是的,确实如此。如果他们想要阅读文档和其他材料,那么为什么还要在这里提问呢?直接提问的目的是为了直接得到答案,而不是花费一整天的时间搜索和阅读。 - Synetech

8
如果您无法使用.NET和托管代码,则可以使用win32 api。 这里是一个示例,您可以修改它以仅获取文件夹。
(基本上是以下检查:)
...
  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

1

为了最佳可移植性,请使用boost文件系统库。对于基于UNIX的系统,请使用opendir()/readdir()等函数。


opendir() 等函数在我使用 MinGW 在 Windows 上工作得很好。 - Jon Purdy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接