Come faccio a rilevare quando la copia è finita?
Non entro nella questione su
Dir( ), pur condividendo le perplessità di
Gianluigi sull'uso di "
Shell",
qualora sia possibile ottenere il medesimo risultato con Gambas.
Ad ogni modo, per ottenere quanto da te richiesto, devi porre alla fine ed all'esterno della riga di comando di
Shell la semplice istruzione
Wait .
http://gambaswiki.org/wiki/lang/wait?l=itEsempio:
Public Sub Main()
Dim tempus As Date
tempus = Now
Shell "cp -r /percorso/cartella/di/origine /percorso/copia/cartella" Wait
Print "Copia terminata in: "; CStr(Date(0, 0, 0, 0, 0, 0, DateDiff(tempus, Now, gb.Millisecond)))
End
Un uso reale lo puoi vedere ad esempio nei miei codici Gambas di creazione delle librerie esterne condivise .so, scritte in C; laddove la compilazione con Shell prevede appunto quella soluzione con Wait per attendere il termine della procedura di compilazione da parte dell'apposito programma esterno "gcc":
Ad esempio:
......
Private Procedure Creaso()
File.Save("/tmp/Alloca.c", "#include <alloca.h>" &
"\n\n" &
"char * Inizializza_Alloca (size_t dimen) {" &
"\n\n" &
" char * c;" &
"\n\n" &
" c = alloca(dimen);" &
"\n\n" &
" return c;" &
"\n\n}")
Shell "gcc -o /tmp/Alloca.so /tmp/Alloca.c -shared" Wait ' <----- Resta in attesa fino a quando il programma gcc non avrà terminato la compilazione della libreria esterna !
End