Sto cercando di fare una piccola applicazione che data una cartella di origine e una di destinazione nella cartella di destinazione (all'inizio vuota) mi ricrei la stessa gerarchia di cartelle dell'origine, es:
Ho scritto una piccola procedura che almeno in teoria dovrebbe girare bene.
Ve la riporto di seguito:
Public Sub SondaCartella(D1 As DirListBox, D2 As DirListBox, P1 As String, P2 As String)
Dim i As Integer
D1.Path = P1
D2.Path = P2
For i = 0 To D1.ListCount - 1
On Error GoTo Errore
D2.Path = D2.Path & Mid(D1.List(i), InStrRev(D1.List(i), "\"))
Torna:
SondaCartella D1, D2, D1.List(i), D2.Path & Mid(D1.List(i), InStrRev(D1.List(i), "\"))
D1.Path = P1
D2.Path = P2
On Error GoTo 0
Next
Exit Sub
Errore:
MkDir D2.Path & Mid(D1.List(i), InStrRev(D1.List(i), "\"))
Err.Clear
GoTo Torna
End Sub
Praticamente cosa fa? Mi porto appresso due oggetti DirListBox e i loro relativi Path allo stato attuale del livello.
Impongo alla D2 il percorso di una cartella di D1, se genera errore vuol dire che la cartella in D2 non esiste e la crea. Vi faccio un esempio pratico:
Nella cartella di origine ho la seguente struttura:
Cartella1 -> Cartella2
-> Cartella3
Cartella4
Dove Cartella1 e 4 si trovano nella root principale e cartella 2 e 3 nella cartella1.
Come deve funzionare la procedura:
Impone che il path di destinazione è uguale a destinazione\cartella1 ma ovviamente caccia errore ed esegue l'istruzione jolly, quella che crea la cartella che non esiste.
Poi la procedura richiama se stessa ma ad un livello inferiore.
Qui si impone il path di destinazione uguale a destinazione\cartella1\cartella2 e si ripete la stessa cosa di sopra.
Richiamando nuovamente se stessa la procedura accade che nel for non ci entra per niente e risale una ricorsione.
Quì in teoria si passa al secondo giro del ciclo for, processando così cartella3, in teoria dovrebbe fare la stessa cosa di quando ha processato cartella2 invece no!
Pur passando nuovamente su On Error Goto Errore non je ne frega un C e quando pianta l'errore... pianta l'errore... :master:
Si, proprio così, nonostante abbia imposto la mi gestione dell'errore a questo punto mi esce le finestra dell'errore che avevo calcolato, ma che avevo calcolato non sarebbe dovuta apparire nel mio schema...
Ora mi chiedo, è un baco o sono io che mi sono rincojonito?