有没有方法可以知道目录是否包含子目录?

时间:2009-07-14 06:40:11

标签: c++ visual-c++ mfc filesystems subdirectory

我在c ++中学习。 有没有方法可以知道目录是否包含子目录?

CFileFind似乎必须搜索总文件。 如果唯一的子目录位于列表的末尾并且存在大量文件,则会非常耗时。

例如:目录A包含99995个文件和FindNextFile List末尾的一个子目录。我试过99995次,然后说:是的,它包含子目录?

4 个答案:

答案 0 :(得分:2)

微软的Raymond Chen写了一篇可能适用于此的帖子:Computing the size of a directory is more than just adding file sizes。实质上,他解释说像dir的条目大小等信息不能存储在dir的条目中,因为不同的用户可能拥有不同的权限,可能会使某些文件对它们不可见。因此,获取用户应该看到的大小的唯一方法是根据用户的请求计算它。

在你的情况下,答案可能源于同样的推理。您的应用程序可用的目录列表只能在您的应用程序要求时确定,因为它的根目录视图可能与使用不同凭据运行的其他应用程序不同。为什么Windows存储目录以及我不知道的文件,但这是给定的。

由于Win32与用户模式下的文件系统一样接近,我会避免使用任何更高级别的解决方案,例如.NET,因为它可能只会简化界面。司机可能会更快地工作,但这超出了我的知识范围。

答案 1 :(得分:1)

如果您使用的是.Net框架,可以使用Directory.GetDirectories并检查数组的大小是否为0.不知道如何为您提供速度。

如果您可以控制目录,则可以应用命名约定,以便具有子目录的目录以一种方式命名,而具有out子目录的目录以另一种方式命名。

答案 2 :(得分:1)

您可以尝试使用boost文件系统库。

按名称分类的directory_iterator [在boost / filesystem / operations.hpp中声明]有许多函数可用于列出文件,查找文件是否是子目录(is_directory - 我想这就是你的意思寻找)等..

有关详细信息,请参阅以下链接。 link text

看来你正在使用MFC [刚看到你正在使用CFileFind],之前没有看到。 对不起,没有太多信息。您可能必须使用FindFirstFile / FindNextFile。

答案 3 :(得分:0)

这是否可以非常快地完成,完全取决于平台。

在Win32上,你使用FindFirstFile / FindNextFile或者像MFC CFileFind这样的包装器,它们按照某种顺序列出项目,不能强制首先列出目录。