1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public virtual void CopyStreams2(Stream a, Stream b, CopyProgressHandler handler)
{
int bufSize = 4 * 1024; /* 64 Ko */
byte[] WorkBuffer = new byte[bufSize], LoadBuffer = new byte[bufSize];
byte[] TmpBuffer = new byte[] /* pas besoin d'avoir un tableau alloué, juste la référence*/;
long done = 0, total = a.Length;
//int tmp = 0; // plus utilisé
double percent = 0;
IAsyncResult result;
//Attention : le nom de la variable posit laisse entendre qu'il s'agit de la position, et non pas du nombre de byte lu
int posit = a.Read(WorkBuffer, 0, bufSize);
while (done < total)
//Attention, le vrai test de fin de lecture est while (posit > 0)
{
result = a.BeginRead(LoadBuffer, 0, bufSize,
null, //appeler une méthode pour ne rien faire n'est pas très intéressant, ou alors tu testes le temps de réponse pour avoir des stats
a);
b.Write(WorkBuffer, 0, posit);
done += bufSize;
percent = (double)done / (double)total;
ProgressFile = Convert.ToInt16(Math.Round(percent * 100, 0));
posit = a.EndRead(result);
TmpBuffer = WorkBuffer;
WorkBuffer = LoadBuffer;
LoadBuffer = TmpBuffer;
}
} |
Partager