Da
Wikipedia:
In informatica, entro un programma, con Application Programming Interface (API) si indica un insieme di procedure (in genere raggruppate per strumenti specifici) atte all'espletamento di un dato compito; spesso tale termine designa le librerie software di un linguaggio di programmazione.
In pratica sono le funzioni che ti permettono di accedere alle funzioni del sistema operativo.
Per accedere al filesystem ed eseguire una "dir", devi prima trovare il primo file che ti interessa con FindFirst, e con i dati che questa ti ritorna puoi accedere a tutti i file successivi con FindNext.
Qui ti metto un vecchio (molto vecchio) metodo che avevo scritto con Visual C++ 6 che eseguiva la scansione di una directory e tutte le sotto directory, giusto come esempio (non ti metto tutta la classe, che probabilmente sui Windows moderni manco funziona più, e sicuramente produrrà un mare di warning, e senz'altro è bacata all'inverosimile, ma quando hai il capo che ti chiede "Hai finito?" ogni 30 minuti, non vai tanto per il sottile).
#include <windows.h>
[omissis]
// Scansione fisica della directory
void Dir::DirScan(const char *percorso)
{
HANDLE DirHandle;
WIN32_FIND_DATA sDatiFile;
Dir_Items *Elemento;
string CurDir = percorso;
string CurSearch = CurDir + Filtro;
// Cerco la prima entry della directory
DirHandle = FindFirstFile(CurSearch.c_str(), &sDatiFile);
if (DirHandle != INVALID_HANDLE_VALUE)
{
// se l'elemento trovato non sono le directory '.' e '..'
if ((strcmp(sDatiFile.cFileName, "."))&&(strcmp(sDatiFile.cFileName, "..")))
{
// Memorizzo l'elemento trovato
Elemento = new Dir_Items(&sDatiFile, CurDir.c_str());
++nItems;
Link(Elemento);
if ((Recursive)&&(Elemento->IsDir()))
{
string PercNuovo;
Elemento->GetPath(&PercNuovo);
DirScan(PercNuovo.c_str()); // Chiamata ricorsiva
}
}
while (FindNextFile(DirHandle, &sDatiFile))
{
if ((strcmp(sDatiFile.cFileName, "."))&&(strcmp(sDatiFile.cFileName, "..")))
{
// Memorizzo l'elemento trovato
Elemento = new Dir_Items(&sDatiFile, CurDir.c_str());
++nItems;
Link(Elemento);
if ((Recursive)&&(Elemento->IsDir()))
{
string PercNuovo;
Elemento->GetPath(&PercNuovo);
DirScan(PercNuovo.c_str()); // Chiamata ricorsiva
}
}
}
FindClose(DirHandle);
}
}
La ricorsione è una possibilità fornita dal C e da altri linguaggi, in cui una funzione può richiamare sé stessa. Utile quando devi esplorare delle strutture annidate come appunto le directory. Il rovescio della medaglia è che se non è sotto attento controllo, la ricorsione può o entrare in loop, o esaurire lo stack.