Copiare ricorsivamente una cartella

Da Gambas-it.org - Wikipedia.

La copia ricorsiva di una Cartella consiste nel copiare ogni contenuto della Cartella medesima; non solo quindi i file presenti, ma anche tutte le sotto-cartelle presenti a vari sotto-livelli e tutti i file in esse contenuti.

In Gambas non esiste una funzione nativa per ottenere quanto sopra descritto.
Pertanto si dovrà creare un apposito algoritmo funzionale.

Mostriamo un esempio pratico:

Private Const CARTELLA_PRINCIPALE As String = "/percorso/della/cartella/principale/da/copiare/interamente"
' Percorso della cartella ove copiare tutto il contenuto della cartella principale:
Private Const CARTELLA_CLONE As String = "/tmp/cartella_clone"


Public Sub Main()

 Dim dr, fl As String

' Crea la nuova Cartella, ove saranno copiate ricorsivamente le eventuali sotto-cartelle e i file della "Cartella principale":
 Mkdir CARTELLA_CLONE

' Copia innanzitutto nella cartella clone i file contenuti nella "Cartella principale":
 For Each fl In Dir(CARTELLA_PRINCIPALE, "*", gb.File)
   COPY CARTELLA_PRINCIPALE &/ fl TO CARTELLA_CLONE &/ fl
 NEXT

' Ricerca ricorsivamente nella "Cartella principale", della quale si deve copiare il contenuto:
 For Each dr In RDir(DOSSIER_PRINCIPAL, Null, gb.Directory)
' Ogni sub-cartella trovata nella "cartella principale" è ricreata (vuota) nella cartella clone:
   Mkdir DOSSIER_CLONE &/ dr
' Per ciascuna sub-cartella trovata nella "cartella principale", sono identificati i percorsi dei file in essa contenuti:
   For Each fl In Dir(DOSSIER_PRINCIPAL &/ dr, "*", gb.File)
' ...che vengono copiati nella nuova sotto-cartella della "cartella clone":
     Copy DOSSIER_PRINCIPAL &/ dr &/ fl To DOSSIER_CLONE &/ dr &/ fl
   Next
 Next

End