https://foro.gambas-es.org/viewtopic.php?f=1&t=5047
-----------------------------------
garvied
Sabado, 19 Diciembre 2015, 18:13

Copiar Archivos Grandes (Solucionado)
-----------------------------------
Estoy con una aplicación en la que copio archivos de gran tamaño y quisiera saber como puedo saber que ha terminado la copia de esos ficheros.
Para copiar estoy usando el comando copy
Muchas gracias


-----------------------------------
vuott
Domingo, 20 Diciembre 2015, 01:02

Re: Copiar Archivos Grandes
-----------------------------------
A mi parece [img]http://forum.ubuntu-it.org/images/smilies/doh.gif[/img] que el comando [i]Copy[/i] no permite proceder, hasta cuando el archivo no haya sido copiado definitivamente.

Con el comando [i]Copy[/i], pues, creo no se pueda hacer otro que esperar el fin de la copia y averiguar el tamaño del file final:

[code linenumbers=false syntax=gambas]Public Sub Main()

  Dim origo, copia As String
  
    origo = "/ruta/del/archivo/origen"
    copia = "/ruta/del/archivo/copia"

     Copy origo To copia

' Averigua el tamaño del archivo origen y del archivo copia:
     If Stat(copia).Size <> Stat(origo).Size Then Print "¡Los tamaños de los dos archivos son diferentes !"

End[/code]


-----------------------------------
garvied
Lunes, 21 Diciembre 2015, 20:04

Re: Copiar Archivos Grandes
-----------------------------------
Gracias por la respuesta, el problema no es que quisiese copiar otro fichero sino que al terminar de copiar el fichero debo abrirlo, al final lo conseguí usando. 
Exec ["cp", ArchivoOrigen, ArchivoDestino] Wait
de esta forma el proceso espera hasta que termina la copia.


-----------------------------------
jguardon
Lunes, 21 Diciembre 2015, 20:23

Re: Copiar Archivos Grandes (Solucionado)
-----------------------------------
Si quieres tener el progreso de copia del fichero, puedes emplear el comando pv (escribe man pv en el terminal para conocer su uso). Hay varias formas de hacerlo, yo hice algo similar, aunque tengo que mejorarlo un poco porque con los ficheros pequeños no funciona. Te dejo un enlace al código:

http://forge.gambas-es.org/projects/simplebackup/repository/entry/gbackup/.src/Functions.module#L61

Puedes descargar el proyecto completo desde aquí para ver su funcionamiento:

http://forge.gambas-es.org/projects/simplebackup/files

Saludos


-----------------------------------
vuott
Martes, 22 Diciembre 2015, 00:50

Re: Copiar Archivos Grandes
-----------------------------------
[quote user="garvied" post="29333"]Exec ["cp", ArchivoOrigen, ArchivoDestino] Wait[/quote]

...pero estás usando un comando / programa [i]bash[/i] con [i]Exec[/i]....
....todo regular, pero.... yo te propongo una solución "[i]sólo Gambas[/i]":   :smile: 
[code linenumbers=false syntax=gambas]Public Sub Main()

    Dim origo, copia As String
    Dim flOr, flCp As File
    Dim bb As Byte[]
    Dim quantum, lo As Integer
    Dim l As Long
    
    origo = "/ruta/del/archivo/muy/grande"
    copia = "/ruta/del/archivo-copia"
    
    flOr = Open origo For Read
    
    flCp = Open copia For Create
    
    lo = Lof(flOr) 
    
    quantum = lo \ 100
    
    bb = New Byte[quantum + (lo Mod 100)]
    
    While Not Eof(flOr)
      If lo - Seek(flOr) < quantum Then quantum = lo - Seek(flOr)
      bb.Read(flOr, 0, quantum)
      bb.Write(flCp, 0, quantum)
      l += quantum
      Write #File.Out, "\r" & CStr((l * 100) \ lo) & "%"   ' Mira el porcentaje como se menea !  :-D
    Wend
    
    flCp.Close
    flOr.Close

End[/code]


