¿Bajar archivo y saber cuando terminó?

Iniciado por extreme69, 29 Enero 2012, 23:12 PM

0 Miembros y 2 Visitantes están viendo este tema.

extreme69

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?

BlackZeroX

Como bajas actualmente el archivo?...

Dulces Lunas!¡.
The Dark Shadow is my passion.

extreme69

#2
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?

STARZ

#3
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 ( vb) [Seleccionar]

Dim a As String
a = "Rojo"
if a = "Rojo" then
msgbox "SI, A es rojo"
msgbox "ROJO"
else
msgbox "NO, A no es Rojo"
end if


Código ( vb) [Seleccionar]

Dim a As String
a = "Rojo"
if a = "Rojo" then msgbox "SI, A es rojo" : msgbox "ROJO"  else msgbox "NO, A no es Rojo"


extreme69

#4
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...

BlackZeroX

Cita de: 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...

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!¡.
The Dark Shadow is my passion.

BlackZeroX

#6
Perdon por el doble post... acabo de leer algo que seguro te interesara...

HttpQueryInfo function
un ejemplo (si no sabes C/C++ donde veas "&dwNombre"  debes usar varptr(dwNombre), donde veas new char debes usar redim).
Retrieving HTTP Headers

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!¡.
The Dark Shadow is my passion.

extreme69

BlackZeroX,

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

extreme69

Listo!

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