J'ai essayé d'écrire un programme en C# qui télécharge un fichier en utilisant plusieurs segments à la fois comme la plupart des gestionnaires de téléchargement, et j'ai rencontré le problème que les fichiers téléchargés sont corrompus. Par exemple, je télécharge une vidéo et il joue pendant 2 secondes puis WMP dit que c'est injouable.Téléchargeur de fichiers C# segmenté
J'ai hexedited le fichier téléchargé et il semble qu'il y ait des sections de zerobytes dispersés dans le fichier, quelqu'un a des idées pourquoi? VS ne signale aucune erreur.
getPart()
est appelée pour chaque segment dans un thread séparé.
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;
}
merci, me demandais, le téléchargement n'est pas en parallèle, non? – ikel