Autore Topic: Copia di una directory, come rilevare l'attesa  (Letto 686 volte)

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.725
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Copia di una directory, come rilevare l'attesa
« il: 01 Luglio 2017, 22:50:56 »
 :ciao:
sto usando un comando tipo:
Codice: [Seleziona]
shell cp -R /Origine /Destinazione
Come faccio a rilevare quando la copia è finita?
Ho provato ad usare la proprietà Busy della classe Application, avendo cura di impostare il componente qt4, ma il comando viene seguito subito e quindi busy torna a 0 subito e non riesco a capire quando la copia è terminata.  :-\
Qualche idea?
 :)
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #1 il: 01 Luglio 2017, 23:11:21 »
Perché usi il comando shell quando Gambas ti mette a disposizione Copy?

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.725
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #2 il: 01 Luglio 2017, 23:19:57 »
 :ciao:
Perchè copy non permette di fare copie recursive!
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #3 il: 01 Luglio 2017, 23:21:39 »
:ciao:
Perchè copy non permette di fare copie recursive!
 :ciao:

E chi lo ha detto? Devi studiarti DIR

 :ciao:
« Ultima modifica: 01 Luglio 2017, 23:26:47 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #4 il: 02 Luglio 2017, 00:50:22 »
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=it

Esempio:
Codice: [Seleziona]
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:
Codice: [Seleziona]
......

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


 
« Ultima modifica: 02 Luglio 2017, 00:54:38 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.725
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #5 il: 02 Luglio 2017, 09:15:56 »
 
Citazione
E chi lo ha detto? Devi studiarti DIR
OK Capitano!  :D
Ho cercato di usare COPY ma nella wiki:
http://gambaswiki.org/wiki/lang/copy
l'affermazione è chiara!
Citazione
Note that you cannot copy directories recursively with this function.
Anche a me non piace usare shell...
Grazie Vuott, magari inizio col Wait poi... con qualche colpo di fioretto alla Fiordelisi.... :P
 :ciao:

Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #6 il: 02 Luglio 2017, 10:12:55 »
Citazione
E chi lo ha detto? Devi studiarti DIR
OK Capitano!  :D
Ho cercato di usare COPY ma nella wiki:
http://gambaswiki.org/wiki/lang/copy
l'affermazione è chiara!
Citazione
Note that you cannot copy directories recursively with this function.
Anche a me non piace usare shell...
Grazie Vuott, magari inizio col Wait poi... con qualche colpo di fioretto alla Fiordelisi.... :P
 :ciao:

 ??? OK cosa, non hai letto la wiki di Dir  ???

 :hatecomputer:

giusto per non dartele in testa...  ;D

Guarda un po qui:
Codice: [Seleziona]
Public Sub Main()

  Dim Directory As String
  Dim Files As String[]
  Dim FileName As String
 
  Directory = System.User.Home &/ "Documenti"
  Files = Dir(Directory, "*.odt")
  Files.Insert(Dir(Directory, "*.pdf"))
  Files.Insert(Dir(Directory, "*.txt"))
 
  If Not Exist(User.Home &/ "Mie Copie") Then Mkdir User.Home &/ "Mie Copie"
  For Each FileName In Files
    Print FileName
    ''Qui potresti copiare con:
    ' Copy "tutto/il/percordo" &/ filename To "tutto/il/percorso/dove/vuoi/copiare" &/ "EventualeTuoNuovoNome(creato ricorsivamente)" & "." & File.Ext(FileName)
    'Più semplicemente lasci gli stessi nomi:
    Copy System.User.Home &/ "Documenti" &/ FileName To User.Home &/ "Mie Copie" &/ FileName
  Next

End
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.725
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #7 il: 02 Luglio 2017, 13:34:38 »
Citazione
??? OK cosa, non hai letto la wiki di Dir  ???
No Gianluigi, non l'ho ancora letta... :P
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #8 il: 02 Luglio 2017, 13:38:43 »
Citazione
??? OK cosa, non hai letto la wiki di Dir  ???
No Gianluigi, non l'ho ancora letta... :P
 :ciao:

Ah beh allora  :violent:

 :P :P :P
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #9 il: 02 Luglio 2017, 15:27:40 »
con qualche colpo di fioretto alla Fiordelisi.... :P

Citazione
??? OK cosa, non hai letto la wiki di Dir  ???
No Gianluigi, non l'ho ancora letta... :P

Invece di studiare Dir pensi alle donne !    >:(

   
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.725
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #10 il: 02 Luglio 2017, 16:34:08 »
Citazione
Invece di studiare Dir pensi alle donne !    >:(
...una vecchia malattia...
 :P
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #11 il: 02 Luglio 2017, 18:22:06 »
...una vecchia malattia...
In vero io conoscevo solo la ceskhonite.   
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #12 il: 10 Luglio 2017, 15:52:04 »
Devi studiarti DIR
Vedendo questo post di allegfede:
http://www.gambas-it.org/smf/index.php?topic=5774.0
forse kicco dovrebbe considerare la funzione RDir( ):
http://gambaswiki.org/wiki/lang/rdir?l=it



« Ultima modifica: 10 Luglio 2017, 15:52:43 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.725
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #13 il: 10 Luglio 2017, 19:08:30 »
 :ciao:
Mi sa che hai ragione!!
Che caso!!!
 sanmidi
ora pro nobis!
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Copia di una directory, come rilevare l'attesa
« Risposta #14 il: 10 Luglio 2017, 20:10:51 »
sanmidi
ora pro nobis!
Semper in te, Sancte Midi, confitemur !
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »