He intentado escribir un programa en C# que descarga un archivo usando varios segmentos a la vez como la mayoría de los administradores de descargas, y me he encontrado con el problema de que los archivos descargados están dañados. Por ejemplo, descargué un video y se reproduce durante 2 segundos, luego WMP dice que no se puede reproducir.Descargador de archivos C# dividido en segmentos
He hexeditado el archivo descargado y parece que hay secciones de cero bytes dispersos en todo el archivo, ¿alguien tiene alguna idea de por qué? VS informa que no hay errores.
getPart()
se llama para cada segmento en una secuencia separada.
public long start;
public long end;
public int thread;
public Form1 handle;
public myFile handler;
public void getPart()
{
log("getting part " + start.ToString() + "," + end.ToString());
HttpWebRequest part = (HttpWebRequest)WebRequest.Create(handler.url);
part.AddRange((int)start,(int) end);
HttpWebResponse pr = (HttpWebResponse)part.GetResponse();
Stream rstream = pr.GetResponseStream();
log("Beginning part " + start.ToString());
int totalbytes = 0;
byte[] buffer = new byte[256];
int x = rstream.Read(buffer, 0, 256);
while (x > 0)
{
handler.writeFile(buffer, (int)(totalbytes + start), x);
totalbytes += x;
x = rstream.Read(buffer, 0, 256);
}
log(start.ToString() + "-byte start part done...");
rstream.Close();
pr.Close();
handler.partDone(thread);
return;
}
public void writeFile(byte[] buffer, int start, int size)
{
mFileStream.Seek(start, SeekOrigin.Begin);
mFileStream.Write(buffer, 0, size);
return;
}
gracias, pregunto, la descarga no está en paralelo, ¿verdad? – ikel