Differenze tra le versioni di "Copiare ricorsivamente una cartella"

Da Gambas-it.org - Wikipedia.
 
(3 versioni intermedie di uno stesso utente non sono mostrate)
Riga 5: Riga 5:
  
 
Mostriamo un esempio pratico:
 
Mostriamo un esempio pratico:
  Private Const CARTELLA_PRINCIPALE As String = "<FONT Color=gray>''/percorso/della/cartella/principale/da/copiare/interamente''</font>"
+
  Private Const CARTELLA_PRINCIPALE As String = "<FONT Color=darkgreen>''/percorso/della/cartella/principale/da/copiare/interamente''</font>"
 +
 
  <FONT Color=gray>' ''Percorso della cartella ove copiare tutto il contenuto della cartella principale:''</font>
 
  <FONT Color=gray>' ''Percorso della cartella ove copiare tutto il contenuto della cartella principale:''</font>
 
  Private Const CARTELLA_CLONE As String = "/tmp/cartella_clone"
 
  Private Const CARTELLA_CLONE As String = "/tmp/cartella_clone"
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
   Dim dr, fl As String
+
   Dim s As String
 
   
 
   
 
  <FONT Color=gray>' ''Crea la nuova Cartella ("cartella-clone"), ove saranno copiate ricorsivamente le eventuali sotto-cartelle e i file della "Cartella principale":''</font>
 
  <FONT Color=gray>' ''Crea la nuova Cartella ("cartella-clone"), ove saranno copiate ricorsivamente le eventuali sotto-cartelle e i file della "Cartella principale":''</font>
 
   Mkdir CARTELLA_CLONE
 
   Mkdir CARTELLA_CLONE
+
    
<FONT Color=gray>' ''Copia innanzitutto nella "cartella-clone" i file contenuti nella "Cartella principale":''</font>
+
  <FONT Color=gray>' ''Effettua la ricerca ricorsiva nella "Cartella principale" di ogni eventuale suo contenuto:''</font>
  For Each fl In Dir(CARTELLA_PRINCIPALE, "*", gb.File)
+
   For Each s In RDir(CARTELLA_PRINCIPALE, "*")
    COPY CARTELLA_PRINCIPALE &/ fl TO CARTELLA_CLONE &/ fl
+
  <FONT Color=gray>' ''Se è un file lo va a copiare nella corrispondente sotto-cartella della "cartella-clone":''</font>
   NEXT
+
     If Not IsDir(CARTELLA_PRINCIPALE &/ s) Then
+
      If Not Exist(CARTELLA_CLONE &/ s) Then Copy CARTELLA_PRINCIPALE &/ s To CARTELLA_CLONE &/ s
  <FONT Color=gray>' ''Effettua la ricerca ricorsiva nella "Cartella principale" di ogni suo contenuto:''</font>
+
    Else
   For Each dr In RDir(DOSSIER_PRINCIPAL, Null, gb.Directory)
+
  <FONT Color=gray>' ''Se invece essa è una sotto-cartella della "Cartella principale", allora è ricreata (vuota) nella "cartella-clone":''</font>
  <FONT Color=gray>' ''Ogni sub-cartella trovata nella "Cartella principale" è ricreata (vuota) nella cartella clone:''</font>
+
       Mkdir CARTELLA_CLONE &/ s
     Mkdir DOSSIER_CLONE &/ dr
+
     Endif
  <FONT Color=gray>' ''Per ciascuna sub-cartella trovata nella "Cartella principale", sono identificati i percorsi dei file in essa contenuti:''</font>
 
    For Each fl In Dir(DOSSIER_PRINCIPAL &/ dr, "*", gb.File)
 
<FONT Color=gray>' ''...che vengono copiati nella nuova sotto-cartella della "cartella-clone":''</font>
 
       Copy DOSSIER_PRINCIPAL &/ dr &/ fl To DOSSIER_CLONE &/ dr &/ fl
 
     Next
 
 
   Next
 
   Next
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 14:02, 23 giu 2024

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