Bueno Hola a todos:
Tengo un codigo que me baje de un cliente/servidor para transferir archivos.El servidor manda al cliente un archivo y cuando lo manda al cliente en el servidor se visualiza un
ProgressBar del transcurso de la transferencia. Yo lo que queria es si se puede visualizar el ProgressBar en el cliente.
Gracias
Servidor:
Private Sub Command1_Click()
Common.DialogTitle = "Buscar archivo..."
Common.FileName = ""
Common.Filter = "Todos los archivos|*.*"
Common.ShowOpen
If Common.FileName <> "" Then
Label2.Caption = Common.FileName
Open Label2.Caption For Binary As #1
TCP.SendData "EMA" & Common.FileTitle & "LAR" & LOF(1) 'envio nombre y largo de archivo
Close #1
End If
On Error GoTo ema
Dim Buf As String * 1024
Dim Todo As String
Open Label2.Caption For Binary As #1
Barra.Min = 0
Barra.Max = LOF(1)
Do While Not EOF(1)
DoEvents
Get #1, , Buf
Todo = Todo & Buf
If Len(Todo) <= Barra.Max Then Barra.Value = Len(Todo)
Loop
Close
TCP.SendData Todo
Exit Sub
ema:
MsgBox Err.Description
End Sub
Private Sub TCP_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
Barra.Min = 0
Barra.Max = bytesSent + bytesRemaining
Barra.Value = bytesSent
End Sub
Cliente:
Private Sub TCP_DataArrival(ByVal bytesTotal As Long)
Dim Texto As String
TCP.GetData Texto
If Mid(Texto, 1, 3) = "EMA" Then
cargo_Datos Texto
Exit Sub
End If
If Mid(Texto, 1, 3) = "LAR" Then
Frame1.Caption = "Archivo : " & Mid(Texto, 4, Len(Texto) - 3) & " bytes."
Largo = CLng(Mid(Texto, 4, Len(Texto) - 3))
Exit Sub
End If
Archivo = Archivo & Texto
If Len(Archivo) >= Largo Then
Common.DialogTitle = "Guardar archivo..."
Common.FileName = Label1.Caption
Common.ShowSave
Open Common.FileName For Binary As #1
Put #1, , Archivo
Largo = 0
Archivo = ""
Close #1
End If
End Sub
Sub cargo_Datos(Txt As String)
Dim i As Long
Dim Nom As String
Txt = Mid(Txt, 4, Len(Txt) - 3)
For i = 1 To Len(Txt)
If Mid(Txt, i, 3) = "LAR" Then
Nom = Left(Txt, i - 1)
Largo = CLng(Mid(Txt, i + 3, Len(Txt) - i))
Label1.Caption = Nom
Frame1.Caption = "Archivo : " & Largo & " bytes..."
End If
Next i
End Sub
Mandale antes de transferir el archivo el tamaño original y estableces la propiedad Max con ese valor, a medida que llegan los datos vas sumandoselo a la propiedad Value.
Saludos.
Claro, el problema es el mismo en el cliente que en el servidor. Lá única diferencia es que el cliente no sabe cual es la meta a menos que tu le indiques el tamaño del archivo.
Primero envías ese tamaño y pones el progressbar.max a eso. Luego repites el código que usaste en el servidor.
Un saludo
Hola
Tengo problemas al usar el codigo.. lo que sucede, es que el programa hace la copia, la transfiere y deja la copia en donde yo le digo.. pero cuando reviso el archivo.. esta incompleto.... y ademas cuando se termina la transferencia, se abre la ventana del commonddialog para decime donde lo quiero guardar pero el progressbar sigue avanzando... y cuando lo guardo antes de que el progress termine , me vuelve a aparecer una y otra vez.... hasta que se termina de llenar el progressbar....no se si el codigo esta mal.. ó cual que puedo hacer
Espero me puedan ayudar... ;D
P.D Si alguien conoce un codigo para la transferencia de archivos... me podrian decir en donde lo encuentro
Un saludo.. GRACIAS... :D
Acabo de hacer la prueba de enviar un archivo.. y lo que pasa fue que al transferir un archivo de 766kb.. primero me mandó el archivo con 9kb y cuando hice la transferencia con el mismo archivo, me mandó el archivo con el resto que faltaba.. los 759kb.. alguien sabe como puedo corregir el codigo para que me envie el archivo completo y no envie un archivo con una cantidad y otro archivo con otra cantidad..
UN SALUDO...
Espero su respuesto.. GRACIAS ;D
Hola
Al principio iba a corregir lo que puse anteriormente... de que hacia la transferencia de un archivo de 766kb... y me enviaba un archivo de 9kb... y luego el resto.... aqui pense que me habia equivocado al colocar 759kb... ya que seria 757kb.. pero... ya lo hice de nuevo, y si hace la transferencia como lo coloque.. primero crea un archivo de 9kb.. y luego otro de 759kb... eso quiere decir que no envia el resto del archivo, sino que, se crea otro archivo y con otra cantidad.... por ejemplo
primero se hace la transferencia de un archivo y se crea y al ejecutarlo, no se puede porque esta incompleto, y al verificar la cantidad es de 9kb.... y si se intenta enviar el mismo archivo.. se transfiere, se crea el archivo.. y al ejecutarlo, tampoco se puede porque esta incompleto y al verificar la cantidad, es de 759kb....y ahi necesito ayuda.. alguien sabe como puedo hacer que no suceda esto, y que me envie el archivo completo y bien.... :-\
Espero su respuesta.. un saludo... ;D
GRACIAS.. :D
Hola. Porqueme sale el siguiente error:
Se require un objeto citando a esta parte.
Aque se refiere TCP?
Cita de: ELGRANSOLRAC en 16 Agosto 2005, 00:17 AM
TCP.SendData "EMA" & Common.FileTitle & "LAR" & LOF(1) 'envio nombre y largo de archivo
Tienes que insertar un control Winsock, y luego llamarlo según el nombre. Si se llama Winsock1, pues sería Winsock1.SendData "datos".
Si no sabes como utilizarlo te recomiendo que te leas algún tutorial.
Saludos!!
Ok. Gracias.
Lo que pasa es que habia copiado el codigo para saber que como funciona y por ello me salio esos errores..