Erhalten Sie Pfad und Dateinamen aller Dateien in einem bestimmten Verzeichnis und seine subdirs

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

  •  19-08-2019
  •  | 
  •  

Frage

Ich habe diesen Code vor einiger Zeit gegeben. Ich habe endlich um, um es zu testen (mit einigen Änderungen, die Dateien an einem anderen Ort zu setzen) ...

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

Es funktioniert nicht richtig. Am Anfang wird es gemischt ..

eine echte Struktur ...

root root \ subdir1 root \ subdir2 root \ subdir3

wird wie folgt vermasselt ...

root root \ subdir1 root \ subdir1 \ subdir2 root \ subdir1 \ subdir2 \ subdir3

und schließlich stoppt sie mit der Wurzel oder Unter \ Unterordner und ‚Pfad‘ enthält nur einen Unterordner (ohne seinen Stammordner)

Das ist völlig nutzlos für aquring nutzbare Voll Pfad Dateinamen.

so entweder können Sie mir sagen, wo der Code falsch läuft ... oder geben Sie mir einige Ratschläge, wie die vollständigen Pfaddateinamen in einem Verzeichnis zu erhalten und alle seine subdirs.

Ich mag es so einfach wie möglich sein. das heißt keine ungewöhnlich fortschrittliche c ++ Funktionen. Sachen, die ein Baumeister Noob wahrscheinlich in der Lage sein zu debuggen ist.

War es hilfreich?

Lösung

Hier können Sie sich subpath an den Strompfad anfügen:

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

Verwenden Sie eine neue Variable für den Pfad kombiniert, so dass Sie nicht vermasseln die path Variable, die Sie immer noch für den Rest müssen die Dateien / Verzeichnisse im Verzeichnis:

AnsiString subpath;
subpath.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(subpath/*, DataSet*/);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top