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 s As String

' Crea la nuova Cartella ("cartella-clone"), ove saranno copiate ricorsivamente le eventuali sotto-cartelle e i file della "Cartella principale":
 Mkdir CARTELLA_CLONE
 
' Effettua la ricerca ricorsiva nella "Cartella principale" di ogni eventuale suo contenuto:
 For Each s In RDir(CARTELLA_PRINCIPALE, "*")
' Se è un file lo va a copiare nella corrispondente sotto-cartella della "cartella-clone":
   If Not IsDir(CARTELLA_PRINCIPALE &/ s) Then
     If Not Exist(CARTELLA_CLONE &/ s) Then Copy CARTELLA_PRINCIPALE &/ s To CARTELLA_CLONE &/ s
   Else
' Se invece essa è una sotto-cartella della "Cartella principale", allora è ricreata (vuota) nella "cartella-clone":
     Mkdir CARTELLA_CLONE &/ s
   Endif
 Next

End