elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Problema enviar archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 3 4 [5] 6 Ir Abajo Respuesta Imprimir
Autor Tema: Problema enviar archivo  (Leído 11,220 veces)
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Problema enviar archivo
« Respuesta #40 en: 6 Abril 2007, 01:17 am »

Podias ponerlo, a mi me interesa saber como leer un archivo de 2GB por ej y q el VB no se pete, como lo haces tu?

Justamente esa es la idea mala que tenemos hasta ahora de transferir el archivo, es decir pasar tooooodo el archivo a una variable y despues transferirlo, y claro viene las imaginaciones malevolas por cierto de decir como paso 80GB a una variable sin que el basic se cuelgue, pues no necesariamente debes pasar lo 80GB del archivo a una variable... y este es el secreto... el tamaño archivo se debe dividir en partes (en cuantas sea necesario) y extraer solo esos tamaños o poriones a una variable lo que es mas razonable que pasar todo el archivo a una variable para luego transferirlos, puedes dividirlo en 10, 100, 1000, o 5000 partes y cada pedazo transferirlo sin problemas. Yo un archivo de mas de 100MB lo divido en 4096 partes aunque puedo elegir ese valor.... esto es 104857600 / 4096 = 25600bytes osea casi 25KB, esos 25 kb a una variable y  esa variable se procede a transferir hasta terminar... si sobra bytes tambien eso se controla, este es el secreto que uso, asi que por teoria ningun archivo asi sea este de 100TB no deberia colgar al basic, aunque quien sabe.

Un Saludo.

Si la historia es esa. Yo cuando subo archivos los suele subir de 10 en 10 bits para poner la barra de progreso, pero primero lo leo entero

La cuestion es, al abrir desde VB (open "C:\...) un archivo de 80GB (simplemente usar la orden open) no se te revienta el programa??


En línea

yovaninu


Desconectado Desconectado

Mensajes: 349



Ver Perfil
Re: Problema enviar archivo
« Respuesta #41 en: 6 Abril 2007, 03:27 am »

mira no se si realmente tendras un archivo de 2GB o 2TB o 1BB, me e tomado la molestia de buscar el archivo mas grande de mi PC y encontré uno de casi 800MB, le puse este código:

Código:
Open "E:\Archivos de programa\eMule\Incoming1\3dsmax 500 Modelos y Texturas.zip" For Binary As #1
Close #1
MsgBox "pasó"
y el basic sigue de lo mas normal...  :D


asi que creo que la resp a tu pregunta es que al menos por debajo de 1 GB el open no "revienta" al basic... ¿alquien tiene archivos de mas de 1GB pa probar ;D ;D ;D ;D ;D ;D?


En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Problema enviar archivo
« Respuesta #42 en: 6 Abril 2007, 12:41 pm »

Pero nos vas a decir como leerlo sin q reviente o no?
En línea

vivachapas


Desconectado Desconectado

Mensajes: 612



Ver Perfil
Re: Problema enviar archivo
« Respuesta #43 en: 6 Abril 2007, 17:55 pm »

como hacen para pasar de a 10 bites... o mas o menos.. yo simplemente pongo ws.senddata file... y lo envia como puede.. o como este por defecto...
y como ponen un archivo en varias string... ¿? :huh:
En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Problema enviar archivo
« Respuesta #44 en: 7 Abril 2007, 13:34 pm »

Al obtener el archivo entero piensa q es una cadena xD por lo q puedes trabajar con el como tal:

Código:
    For o = 1 To Len(Todo) 'Leemos el archivo de 10 en 10 bit's
        Parte = Mid(Todo, o, 10)
        o = o + 9
        ws.SendData Parte 'Enviamos los 10 bit's
    Next o

todo es el archivo entero  ;)
En línea

vivachapas


Desconectado Desconectado

Mensajes: 612



Ver Perfil
Re: Problema enviar archivo
« Respuesta #45 en: 7 Abril 2007, 17:53 pm »

bien.. creo q lo entendi mas o menos...

Citar
Parte = Mid(Todo, o, 10)

el 10 es de 10 bites... osea q si quiero pasar de a 5 por ejemplo pongo 5 ¿?

y a este no lo entendi...

Citar
o = o + 9

no tendria q ser mas 10¿?
En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Problema enviar archivo
« Respuesta #46 en: 8 Abril 2007, 12:29 pm »

No  :xD pruevalo y veras como tiene q ser 9, si pones 10 pierdes datos. Tambien puedes usar step:

Código:
For o = 1 To Len(Todo) step 10
        Parte = Mid(Todo, o, 10)
        ws.SendData Parte 'Enviamos los 10 bit's
Next o

1S4ludo
En línea

ZoNike

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Problema enviar archivo
« Respuesta #47 en: 8 Abril 2007, 22:10 pm »

tengo un problemilla con el codigo.. porfa aber si alguien me puede ayudar.. gracias.

SERVIDOR:

Código:
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim datosS As String
Winsock1.GetData datosS

If Left(datosS, 7) = "archivo" Then
    dato = Split(datosSS, "|") 'una variable dato (dim dato() as string) se encarga de dividir clave, tamaño y ruta
    filesize = dato(1) 'aqui tengo el tamaño enviado por el cliente
    Winsock1.SendData "enviar" 'ahora si le pido al cliente que envie el archivo en si
    datosSS = ""
End If
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim Datos2 As String
Dim datos As String
Winsock2.GetData datos

   Datos2 = Datos2 & datos 'lo que te decia: juntamos parte por parte el archivo que el cliente esta enviando

    If Len(Datos2) = filesize Then 'si termina
      Open App.Path & "nuevoArchivo.jpg" For Binary As #4 'asumo que envias un JPG, sino vas a tener que usar un CommonDialog en el cliente si quieres usar el mismo nombre de archivo que envias del cliente
       Put #4, 1, Datos2
      Close #4
      Datos2 = "" 'vaceas el buffer
      MsgBox "Archivo Recibido con Éxito." 'vuala, aqui termina todo el proceso y depues de esto supongo que tendras que cargar la imagen recibida a un picture, eso ya es tu trabajo.
    End If
End Sub

CLIENTE:

Código:
Private Sub Timer2_Timer()

SavePicture Picture1.Image, App.Path + "/temp.bmp"

Open App.Path + "/temp.bmp" For Binary As #1
  filedata = Input(LOF(1), 1) 'en esta variable string cargo todo el archivo
 Close #1

filesize = Len(filedata) 'aqui calculo el tamaño de lo que estoy enviando (long) en bytes

If Winsock1.State = "7" Then
Winsock1.SendData "enviar" & "|" & filesize 'envio prmeramente una clave "enviar" luego el tamaño "filesize" y la ruta  "ruta"... (aun no estoy enviando el archivo en si)
End If
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Winsock1.GetData data
If data = "enviar" Then
Winsock2.SendData filedata
End If
End Sub

Aqui como lo he puesto esta para que funcione con 2 Winsock pero si me lo podeis explicar con 1 solo muxo mejor, gracias x todo espero respuesta. saludos.
En línea

vivachapas


Desconectado Desconectado

Mensajes: 612



Ver Perfil
Re: Problema enviar archivo
« Respuesta #48 en: 8 Abril 2007, 22:19 pm »

pero q problema tienes?? lo quieres hacer con un solo winsock? q es lo q no entiendes... o yo no te entiendo...
En línea

ZoNike

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Problema enviar archivo
« Respuesta #49 en: 8 Abril 2007, 22:21 pm »

Pues que el codigo en si no me funciona... no recibe nada.
En línea

Páginas: 1 2 3 4 [5] 6 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO] Problema al abrir archivo para enviar « 1 2 3 »
Programación Visual Basic
ŞCØRPIØN-X3 25 11,343 Último mensaje 12 Mayo 2011, 23:34 pm
por ŞCØRPIØN-X3
Enviar a ftp archivo
Scripting
dian1919 4 3,686 Último mensaje 14 Octubre 2022, 21:27 pm
por Danielㅤ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines