如何查找目录下的所有文件夹

how to find all folders under directory

本文关键字:文件夹 何查找 查找      更新时间:2023-10-16

我测试了使用mfc在Visual Studio环境中查找目录下的所有文件夹。只需制作一个 mfc dlg,添加一个按钮,粘贴下面的代码。唯一要给出的变量是带有文件夹的"product_path"目录,空文件夹可以是 123,或 abc 或 ABC 之类的名称。测试: 测试 1 个名为 123,456 的文件夹。 结果:可以找到全部。 测试 2 个名为 123,456,AB 的文件夹。 结果:找不到文件夹名称 AB。 测试 3 个名为 123,ab,AB 的文件夹。 结果:找不到文件夹名称 AB。

/*vector_folder_name used to store found folders*/
vector<CString> vector_folder_name;
/*product_path directory with folders*/
CString product_path=_T("..\ProductType");
//sprintf(product_path,"..\%s","ProductType");
if (product_path.Right(1) != "\")
{
    product_path += _T("\");
}       
product_path += _T("*.*");
CFileFind ff;
BOOL ret = ff.FindFile(product_path);
while (ret)
{
    ret = ff.FindNextFile();
    if (ret != 0)
    {
        if (ff.IsDirectory() && !ff.IsDots())
        {
            //CString path = ff.GetFilePath();
            CString folder_name = ff.GetFileName();
            vector_folder_name.push_back(folder_name);
            //TraverseDir(path, vec);
        }
        //else /*if(!ff.IsDirectory() && !ff.IsDots())*/
        //{
        //  CString name = ff.GetFileName();
        //  CString path = ff.GetFilePath();
        //  vector_folder_name.push_back(path);
        //}
    }
}
//sort(vector_folder_name.begin(),vector_folder_name.end());
sort(vector_folder_name.begin(),vector_folder_name.end(),compare1);
ff.Close(); // do not foget close

您的问题与大写或小写文件名完全无关,这种情况也没有什么神奇之处,但是您的代码不正确。它也与compare1函数无关

FindNextFile在找到最后一个文件时返回FALSE,因此您的代码只是跳过找到的最后一个文件。

换句话说,如果FindNextFile返回FALSE,这不是错误,但这意味着您已经获得了目录中的最后一个文件。

这个(甚至更简单的(代码有效:

  ...
  BOOL ret = ff.FindFile(product_path);
  while (ret)
  {
    ret = ff.FindNextFile();
    if (ff.IsDirectory() && !ff.IsDots())
    {
      // it's a directory
      CString folder_name = ff.GetFileName();
      vector_folder_name.push_back(folder_name);
    }
  }
  ...

我已经删除了您的注释代码。