Is there any way to use Stream.CopyTo to copy only certain number of bytes to destination stream? what is the best workaround?
Edit:
My workaround (some code omitted):
internal sealed class Substream : Stream 
    {
        private readonly Stream stream; 
        private readonly long origin;   
        private readonly long length; 
        private long position;        
        public Substream(Stream stream, long length)
        {
            this.stream = stream;
            this.origin = stream.Position;
            this.position = stream.Position;
            this.length = length;            
        }
public override int Read(byte[] buffer, int offset, int count)
        {
            var n = Math.Max(Math.Min(count, origin + length - position), 0);                
            int bytesRead = stream.Read(buffer, offset, (int) n);
            position += bytesRead;
            return bytesRead;            
        }
}
then to copy n bytes:
var substream = new Substream(stream, n);
                substream.CopyTo(stm);
 
     
     
    