private static void CopyStreamWithProgress(Stream source, Stream dest, ref int filesDone, ref long bytesDone, byte[] tempBuffer, long len = -1) { long done = 0; if (len < 0) len = source.Length; while (done < len) { long todo = Math.Min(tempBuffer.LongLength, len - done); int cdone = source.Read(tempBuffer, 0, (int)todo); if (cdone <= 0) break; dest.Write(tempBuffer, 0, cdone); done += cdone; bytesDone += cdone; } filesDone++; }