Obtenir le chemin et le nom de fichier de tous les fichiers d'un répertoire donné et de ses sous-répertoires

StackOverflow https://stackoverflow.com/questions/456504

  •  19-08-2019
  •  | 
  •  

Question

On m'a donné ce code il y a quelque temps. Je me suis enfin mis à le tester (avec quelques modifications pour mettre les fichiers à un endroit différent) ...

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

Cela ne fonctionne pas correctement. Au début, ça se mêle ..

une vraie structure 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 racine ou sous-répertoire et 'chemin' contient uniquement un sous-dossier (sans ses dossiers racine)

cela est totalement inutile pour l'aquargement des noms de fichiers utilisables en chemin complet.

afin que soit vous puissiez me dire où le code va mal ... ou me donner des conseils sur la façon d'obtenir les noms de fichiers de chemin d'accès complet dans un répertoire et tous ses sous-répertoires.

Je veux que ce soit aussi simple que possible. c'est-à-dire pas de fonctionnalités avancées c ++ avancées inhabituelles trucs qu'un constructeur noob est susceptible de pouvoir déboguer.

Était-ce utile?

La solution

Vous ajoutez ici chaque sous-chemin au chemin actuel:

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

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

AnsiString subpath;
subpath.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(subpath/*, DataSet*/);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top