Obtener ruta y nombre de archivo de todos los archivos en un directorio dado y sus subdirecciones

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

  •  19-08-2019
  •  | 
  •  

Pregunta

Me dieron este código hace un tiempo. Finalmente pude probarlo (con algunos cambios para colocar los archivos en un lugar diferente) ...

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

No funciona correctamente. Al principio se mezcla ...

una estructura real de ...

raíz root \ subdir1 root \ subdir2 root \ subdir3

se arruina así ...

raíz root \ subdir1 root \ subdir1 \ subdir2 root \ subdir1 \ subdir2 \ subdir3

y finalmente deja de incluir las carpetas raíz o sub \ sub y la 'ruta' solo contiene una subcarpeta (sin sus carpetas raíz)

esto es completamente inútil para obtener nombres de archivo de ruta completa utilizables.

así que o puedes decirme dónde va mal el código ... o dame algunos consejos sobre cómo obtener los nombres de archivo de ruta completa en un directorio y todo sus subdires.

Quiero que sea lo más básico posible. es decir, no hay características avanzadas de C ++ poco comunes. cosas que un constructor novato probablemente pueda depurar.

¿Fue útil?

Solución

Aquí agrega cada subruta a la ruta actual:

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

Use una nueva variable para la ruta combinada, para no estropear la variable ruta que todavía necesita para el resto de los archivos / directorios en el directorio:

AnsiString subpath;
subpath.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(subpath/*, DataSet*/);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top