有没有办法知道一个目录是否包含子目录? 我在C++中工作。 有没有办法知道一个目录是否包含子目录

有没有办法知道一个目录是否包含子目录? 我在C++中工作。 有没有办法知道一个目录是否包含子目录,c++,visual-c++,mfc,filesystems,subdirectory,C++,Visual C++,Mfc,Filesystems,Subdirectory,CFileFind似乎必须搜索所有文件。 如果唯一的子目录位于列表的末尾,并且有很多文件,这将非常耗时 例如:目录A包含99995个文件和FindNextFile列表末尾的一个子目录。如果我尝试了99995次,然后说:是的,它包含子目录?这是否可以快速完成完全取决于平台 在Win32上,您可以在MFC CFileFind上使用FindFirstFile/FindTextFile或包装器,它们以某种顺序列出项目,不能强制首先列出目录。如果您使用的是可以使用的.Net framework,请检查数组

CFileFind似乎必须搜索所有文件。 如果唯一的子目录位于列表的末尾,并且有很多文件,这将非常耗时


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

这是否可以快速完成完全取决于平台


在Win32上,您可以在MFC CFileFind上使用FindFirstFile/FindTextFile或包装器,它们以某种顺序列出项目,不能强制首先列出目录。

如果您使用的是可以使用的.Net framework,请检查数组的大小是否为0。不知道这将如何给你的速度


如果您可以控制目录,则可以应用命名约定,这样有子目录的目录将以一种方式命名,没有子目录的目录将以另一种方式命名。

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

一个名为class的目录\迭代器[在boost/filesystem/operations.hpp中声明]有许多函数,可用于列出文件、查找文件是否为子目录(是\目录--我想这就是您要查找的)等

有关更多信息,请参阅以下链接。

似乎您正在使用MFC[刚才看到您正在使用CFileFind],但之前没有看到。
抱歉,没有太多信息。您可能必须使用FindFirstFile/FindNext文件。

微软的Raymond Chen写了一篇文章,可能适用于这里:。本质上,他解释说,像dir的大小这样的信息不能存储在dir的条目中,因为不同的用户可能有不同的权限,可能会使一些文件对他们不可见。因此,获得用户应该看到的大小的唯一方法是根据用户的请求计算它

在你的例子中,答案可能来自同样的推理。应用程序可用的目录列表只能在应用程序请求时确定,因为其根目录视图可能不同于另一个应用程序,并使用不同的凭据运行。我不知道为什么Windows会将目录和文件一起存储,但这是一个已知的问题


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

比如,99995个文件和FindNext文件列表末尾的一个子目录。我试过99995次,然后说:是的,它包含子目录?是的,这是在Win32上列出目录内容的唯一方法。这就是为什么在资源管理器中打开一个包含许多文件的文件夹会花费很多时间。在一个文件夹中包含99996个文件也很糟糕,不是吗?我们有一个解决方案,它可以在包含50万个文件的文件夹上运行。启动它需要很长时间(这是获取文件的地方),但其他的工作正常。是的,但是我正在编写桌面软件,我不能认为把99996个文件放在文件夹里的客户是愚蠢的…事实上,我想给他们一个更快的文件系统树视图,不管文件在一个目录中有多大可能。许多人还是感谢他们!boost文件系统很有用。我在LinuxI工作时使用过它,假设boost原语在Win32上也使用FindFirstFile/FindTextFile。如果没有,人们可以查看它们是如何工作的,并检查该解决方案是否更好。