2009-01-19 10 views
0

J'ai reçu ce code il y a quelque temps. J'ai finalement eu le temps de le tester (avec quelques modifications pour mettre les fichiers dans un endroit différent) ...Récupère le chemin et le nom de fichier de tous les fichiers d'un répertoire donné et de ses sous-répertoires

void AddFiles(AnsiString path/*, TDataSet *DataSet*/) 
{ 
TSearchRec sr; 
int f; 
    f = FindFirst(path+"\\*.*", faAnyFile, sr); 
    while(!f) 
    { 
     if(sr.Attr & faDirectory) 
     { 
       if(sr.Name != "." && sr.Name != "..") 
       { 
         path.sprintf("%s%s%s", path, "\\", sr.Name); 
         AddFiles(path/*, DataSet*/); 
       } 
     } 
     else 
     { 
       Form1->ListBox1->Items->Add(path+ "\\"+ sr.Name); 
       //DataSet->Append(); 
       //DataSet->FieldByName("Name")->Value = sr.Name; 
       /* other fields ... */ 
       //DataSet->Post(); 
     } 
     f = FindNext(sr); 
    } 
    FindClose(sr); 
} 

Il ne fonctionne pas correctement. Au début, il se mêle ..

une structure réelle de ...

racine root \ subdir1 root \ subdir2 root \ SubDir3

se foiré comme ça ...

racine root \ subdir1 root \ subdir1 \ subdir2 root \ subdir1 \ subdir2 \ SubDir3

et finalement il arrête d'inclure les sous-dossiers root et sub \ sub et 'path' contient juste un sous-dossier (sans ses dossiers racine)

Ceci est complètement inutile pour les noms de fichiers complets utilisables.

si soit pouvez-vous me dire où le code va mal ... ou me donner quelques conseils sur la façon d'obtenir les noms de fichiers de chemin complet dans un répertoire et tous ses sous-répertoires.

Je veux que ce soit aussi basique que possible. c'est-à-dire aucune caractéristique C++ avancée inhabituelle. choses qu'un constructeur noob est susceptible de pouvoir déboguer.

Répondre

4

Ici vous ajoutez chaque sous-chemin au chemin courant:

path.sprintf("%s%s%s", path, "\\", sr.Name); 
AddFiles(path/*, DataSet*/); 

Utilisez une nouvelle variable pour le chemin combiné, donc vous ne pas gâcher la variable path vous avez encore besoin pour le reste des fichiers/répertoires dans le répertoire:

AnsiString subpath; 
subpath.sprintf("%s%s%s", path, "\\", sr.Name); 
AddFiles(subpath/*, DataSet*/); 
+0

Cela a fait l'affaire. Merci :) – MrVimes

Questions connexes