Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: extreme69 en 29 Enero 2012, 23:12 pm



Título: ¿Bajar archivo y saber cuando terminó?
Publicado por: extreme69 en 29 Enero 2012, 23:12 pm
Nada, bajando el archivo no tengo problemas, estoy usando un timer con un tiempo exagerado "por las dudas" pero me gustaría encontrar la forma de saber apenas el archivo terminó de bajarse y si terminó de bajarse entero o se cortó en el camino...

Por ejemplo, para saber cuando terminó de bajarse también puedo usar un timer que lea el tamaño del archivo y cuando el archivo durante X cantidad de segundos no varía de tamaño debería haber concluido la descarga, pero no tengo manera de saber si se cortó la descarga o si llegó entero el archivo.

Otra posibilidad que me planteo es conectar por FTP al hosting donde está el archivo a bajar, leer el tamaño del archivo antes de descargarlo y compararlo con el archivo bajado, cuando el archivo bajado llega al mismo peso obviamente terminó de bajar y si no llega pasados X segundos es porque no logró descargar correctamente y lo intentaría de nuevo hasta lograrlo con éxito.

¿Hay alguna manera "fácil" de hacer esto? ¿o tengo que hacerlo engorroso?


Título: Re: ¿Bajar archivo y saber cuando terminó?
Publicado por: BlackZeroX en 29 Enero 2012, 23:17 pm
Como bajas actualmente el archivo?...

Dulces Lunas!¡.


Título: Re: ¿Bajar archivo y saber cuando terminó?
Publicado por: extreme69 en 29 Enero 2012, 23:33 pm
Tengo varios codes para el download que usé antes en otros programas, no sería problema utilizar otro code.

Actualmente tengo ganas de usar este código de Alberto Falossi que encontré aca: http://www.devx.com/vb2themax/Tip/19203

Tiene un reporte de errores, pero no me queda claro que pasaría si el archivo no logra descargarse.

También veo que no hay end if por ningún lado pero funciona igual... ¿me explican porqué no son necesarios los end if en este caso?


Título: Re: ¿Bajar archivo y saber cuando terminó?
Publicado por: STARZ en 29 Enero 2012, 23:55 pm
Hola, te respondo a lo de "End If"

Cuando usas if then etc no es necesario ponerle el end if siempre y cuando mantengas toda la estuctura del IF en la misma línea; también puedes agegar dos puntos para seguir agregando concluciones.

ej iguales:
Código
  1. Dim a As String
  2. a = "Rojo"
  3. if a = "Rojo" then
  4. msgbox "SI, A es rojo"
  5. msgbox "ROJO"
  6. else
  7. msgbox "NO, A no es Rojo"
  8. end if

Código
  1. Dim a As String
  2. a = "Rojo"
  3. if a = "Rojo" then msgbox "SI, A es rojo" : msgbox "ROJO"  else msgbox "NO, A no es Rojo"


Título: Re: ¿Bajar archivo y saber cuando terminó?
Publicado por: extreme69 en 30 Enero 2012, 00:02 am
Gracias STARZ, yo siempre lo hice en varias lineas, parece más prolijo.

¿Me ayudan con lo de saber cuando terminó de descargarse el archivo y si se descargó correctamente?

Sino lo voy a tener que hacer por FTP midiendo los tamaños, pero FTP no es tan estable como HTTP... me va a empezar a tirar errores de sockets, o connection failed, o timeout, etc...


Título: Re: ¿Bajar archivo y saber cuando terminó?
Publicado por: BlackZeroX en 30 Enero 2012, 00:13 am
Gracias STARZ, yo siempre lo hice en varias lineas, parece más prolijo.

¿Me ayudan con lo de saber cuando terminó de descargarse el archivo y si se descargó correctamente?

Sino lo voy a tener que hacer por FTP midiendo los tamaños, pero FTP no es tan estable como HTTP... me va a empezar a tirar errores de sockets, o connection failed, o timeout, etc...

Yo por lo menos necesito saber como rayos descargas actualmente el archivo, si usas WININET como el codigo de la liga que pusiste de "Alberto Falossi" pues simplemente tienes que comparar segun la MSDN dice si es que falla

http://msdn.microsoft.com/en-us/library/windows/desktop/aa385096%28v=vs.85%29.aspx

Citar
Return value

Returns a valid handle that the application passes to subsequent WinINet functions. If InternetOpen fails, it returns NULL. To retrieve a specific error message, call GetLastError.

Para mas info(Se lista TODO lo referente con la WININET):  http://msdn.microsoft.com/en-us/library/windows/desktop/aa385483%28v=vs.85%29.aspx

Nota: Lo del if then es mejor usar solo 1 sentencia (sin los ":" ya que no es nada prolijo).

Dulces Lunas!¡.


Título: Re: ¿Bajar archivo y saber cuando terminó?
Publicado por: BlackZeroX en 30 Enero 2012, 00:20 am
Perdon por el doble post... acabo de leer algo que seguro te interesara...

HttpQueryInfo function (http://msdn.microsoft.com/en-us/library/windows/desktop/aa385373%28v=vs.85%29.aspx)
un ejemplo (si no sabes C/C++ donde veas "&dwNombre"  debes usar varptr(dwNombre), donde veas new char debes usar redim).
Retrieving HTTP Headers  (http://msdn.microsoft.com/en-us/library/windows/desktop/aa385373%28v=vs.85%29.aspx)

Con esa api puedes saber cuanta información esperas recibir (array de tipo byte no string...), con conjunto con la funcion de la liga aquella puedes verificar el peso del archivo descargado con el peso orifinal (No usaras un buffer de bytes).

Dulces Lunas!¡.


Título: Re: ¿Bajar archivo y saber cuando terminó?
Publicado por: extreme69 en 30 Enero 2012, 00:27 am
BlackZeroX,

Todos los códigos de ejemplo son C++ o al menos no son VB6, entiendo poco y/o nada que hace el code.


Título: Re: ¿Bajar archivo y saber cuando terminó?
Publicado por: extreme69 en 30 Enero 2012, 10:57 am
Listo!

Lo solucioné mudandome a VB.NET y usando una progress bar.