// Returns a stream that represents the data section of the current header. // If copyData is true, then a total number of _size bytes will be copied to a new MemoryStream, which is then returned. // Otherwise, if the archive stream is seekable, returns a seekable wrapper stream. // Otherwise, it returns an unseekable wrapper stream. private Stream?GetDataStream(Stream archiveStream, bool copyData) { if (_size == 0) { return(null); } if (copyData) { MemoryStream copiedData = new MemoryStream(); TarHelpers.CopyBytes(archiveStream, copiedData, _size); return(copiedData); } return(archiveStream.CanSeek ? new SeekableSubReadStream(archiveStream, archiveStream.Position, _size) : new SubReadStream(archiveStream, 0, _size)); }
// Returns a stream that represents the data section of the current header. // If copyData is true, then a total number of _size bytes will be copied to a new MemoryStream, which is then returned. // Otherwise, if the archive stream is seekable, returns a seekable wrapper stream. // Otherwise, it returns an unseekable wrapper stream. private Stream?GetDataStream(Stream archiveStream, bool copyData) { if (_size == 0) { return(null); } if (copyData) { MemoryStream copiedData = new MemoryStream(); TarHelpers.CopyBytes(archiveStream, copiedData, _size); // Reset position pointer so the user can do the first DataStream read from the beginning copiedData.Position = 0; return(copiedData); } return(archiveStream.CanSeek ? new SeekableSubReadStream(archiveStream, archiveStream.Position, _size) : new SubReadStream(archiveStream, 0, _size)); }