Question

Quelle est la façon la plus propre à la recherche récursive pour les fichiers en utilisant C ++ et MFC?

EDIT: Est-ce que l'une de ces solutions offrent la possibilité d'utiliser plusieurs filtres passe par l'un? Je suppose que je pourrais avec CFileFind filtrer *. * Puis écrire du code personnalisé pour filtrer davantage dans différents types de fichiers. Est-ce que l'offre de quoi que ce soit intégré dans plusieurs filtres (ie. * .Exe, *. Dll)?

EDIT2: Il suffit de réaliser une hypothèse évidente que je faisais qui fait mon précédent EDIT invalide. Si je suis en train de faire une recherche récursive avec CFileFind, je dois utiliser *. * Comme mon caractère générique car sinon les sous-répertoires ne seront pas jumelés et aucune récursivité aura lieu. filtrage sur les différents fichiers de façon-extentions devra être traitée séparément, indépendamment.

Autres conseils

Je sais que ce n'est pas votre question, mais il est aussi facile à Tô sans récursivité en utilisant un CStringArray

void FindFiles(CString srcFolder)
{   
  CStringArray dirs;
  dirs.Add(srcFolder + "\\*.*");

  while(dirs.GetSize() > 0) {
     CString dir = dirs.GetAt(0);
     dirs.RemoveAt(0);

     CFileFind ff;
     BOOL good = ff.FindFile(dir);

     while(good) {
        good = ff.FindNextFile();
        if(!ff.IsDots()) {
          if(!ff.IsDirectory()) {
             //process file
          } else {
             //new directory (and not . or ..)
             dirs.InsertAt(0,nd + "\\*.*");
          }
        }
     }
     ff.Close();
  }
}

Consultez la recls bibliothèque - est synonyme de rec ursive ls - qui est une bibliothèque de recherche récursive qui fonctionne sous UNIX et Windows. Il est une bibliothèque C avec des adaptations à différentes langues, y compris C ++. De mémoire, vous pouvez l'utiliser quelque chose comme ce qui suit:

using recls::search_sequence;


CString dir = "C:\\mydir";
CString patterns = "*.doc;abc*.xls";
CStringArray paths;
search_sequence files(dir, patterns, recls::RECURSIVE);

for(search_sequence::const_iterator b = files.begin(); b != files.end(); b++) {
    paths.Add((*b).c_str());
}

Il trouverez tous les fichiers .doc, et tous les fichiers .xls commençant par abc dans C:. \ Mydir ou de ses sous-répertoires

Je n'ai pas compilé, mais il devrait être assez proche de la marque.

CString strNextFileName , strSaveLog= "C:\\mydir";
Find.FindFile(strSaveLog);
BOOL l = Find.FindNextFile();
if(!l)
    MessageBox("");
strNextFileName = Find.GetFileName();

Son ne fonctionne pas. Find.FindNextFile () renvoie false même les fichiers sont présents dans le même directory``

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top