代码之家  ›  专栏  ›  技术社区  ›  xtkwfn

如何查找目录[已关闭]下的所有文件夹

  •  0
  • xtkwfn  · 技术社区  · 7 年前

    我使用mfc在visual studio环境下测试了查找目录下的所有文件夹。只需制作一个mfc dlg,添加一个按钮,粘贴下面的代码。唯一要给出的变量是带有文件夹的“product\u path”目录,空文件夹是ok名称,如123、abc或abc。 测试: 测试1个名为123456的文件夹。 结果:可以找到全部。 测试名为123456,ab的2个文件夹。 结果:找不到文件夹名称ab。 测试名为123、ab、ab的3个文件夹。 结果:找不到文件夹名称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
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Jabberwocky    7 年前

    您的问题与大小写文件名完全无关,这种情况也没有什么神奇之处,但您的代码是错误的。这也与 compare1 作用

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

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