wabbajack/Wabbajack.Compression.Zip/Extensions.cs

21 lines
681 B
C#
Raw Normal View History

namespace Wabbajack.Compression.Zip;
public static class Extensions
{
public static async Task CopyToLimitAsync(this Stream frm, Stream tw, int limit, CancellationToken token)
{
var buff = new byte[1024 * 128];
while (limit > 0 && !token.IsCancellationRequested)
{
var toRead = Math.Min(buff.Length, limit);
var read = await frm.ReadAsync(buff.AsMemory(0, toRead), token);
if (read == 0)
throw new Exception("End of stream before end of limit");
await tw.WriteAsync(buff.AsMemory(0, read), token);
limit -= read;
}
await tw.FlushAsync(token);
}
}