Ottieni percorso e nome file di tutti i file in una determinata directory e i suoi sottodir

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

  •  19-08-2019
  •  | 
  •  

Domanda

Mi è stato dato questo codice qualche tempo fa. Sono finalmente riuscito a provarlo (con alcune modifiche per posizionare i file in un posto diverso) ...

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

Non funziona correttamente. All'inizio si confonde ..

una vera struttura di ...

root root \ subdir1 root \ subdir2 root \ subdir3

viene incasinato in questo modo ...

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

e alla fine smette di includere le cartelle root o sub \ sub e 'path' contiene solo una sottocartella (senza le sue cartelle root)

questo è completamente inutile per ottenere nomi di file a percorso completo utilizzabili.

quindi o puoi dirmi dove il codice non va ... o darmi qualche consiglio su come ottenere i nomi di file del percorso completo in una directory e tutto i suoi sottodir.

Voglio che sia il più semplice possibile. cioè nessuna caratteristica c ++ avanzata insolita. cose che è probabile che un builder builder sia in grado di eseguire il debug.

È stato utile?

Soluzione

Qui aggiungi ogni sotto-percorso al percorso corrente:

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

Usa una nuova variabile per il percorso combinato, in modo da non confondere la variabile path che ti serve ancora per il resto dei file / dir nella directory:

AnsiString subpath;
subpath.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(subpath/*, DataSet*/);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top