Gambas-it

Gambas3 => Programmazione => Topic aperto da: kicco - 01 Luglio 2017, 22:50:56

Titolo: Copia di una directory, come rilevare l'attesa
Inserito da: kicco - 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:
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: Gianluigi - 01 Luglio 2017, 23:11:21
Perché usi il comando shell quando Gambas ti mette a disposizione Copy?

 :ciao: :ciao:
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: kicco - 01 Luglio 2017, 23:19:57
 :ciao:
Perchè copy non permette di fare copie recursive!
 :ciao:
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: Gianluigi - 01 Luglio 2017, 23:21:39
:ciao:
Perchè copy non permette di fare copie recursive!
 :ciao:

E chi lo ha detto? Devi studiarti DIR (http://gambaswiki.org/wiki/lang/dir)

 :ciao:
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: vuott - 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


 
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: kicco - 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 (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:

Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: Gianluigi - 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 (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
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: kicco - 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:
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: Gianluigi - 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
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: vuott - 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 !    >:(

    (http://www.sherv.net/cm/emo/kiss/sexy-blonde-kiss-smiley-emoticon.gif)
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: kicco - 02 Luglio 2017, 16:34:08
Citazione
Invece di studiare Dir pensi alle donne !    >:(
...una vecchia malattia...
 :P
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: vuott - 02 Luglio 2017, 18:22:06
...una vecchia malattia...
In vero io conoscevo solo la ceskhonite.   (https://www.forumla.de/images/smilies/verwirrt/g.gif)
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: vuott - 10 Luglio 2017, 15:52:04
Devi studiarti DIR (http://gambaswiki.org/wiki/lang/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



Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: kicco - 10 Luglio 2017, 19:08:30
 :ciao:
Mi sa che hai ragione!!
Che caso!!!
 sanmidi
ora pro nobis!
Titolo: Re:Copia di una directory, come rilevare l'attesa
Inserito da: vuott - 10 Luglio 2017, 20:10:51
sanmidi
ora pro nobis!
Semper in te, Sancte Midi, confitemur !