// Writes the current header's data stream into the archive stream. private static void WriteData(Stream archiveStream, Stream dataStream, long actualLength) { dataStream.CopyTo(archiveStream); // The data gets copied from the current position int paddingAfterData = TarHelpers.CalculatePadding(actualLength); archiveStream.Write(new byte[paddingAfterData]); }
// Asynchronously writes the current header's data stream into the archive stream. private static async Task WriteDataAsync(Stream archiveStream, Stream dataStream, long actualLength, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); await dataStream.CopyToAsync(archiveStream, cancellationToken).ConfigureAwait(false); // The data gets copied from the current position int paddingAfterData = TarHelpers.CalculatePadding(actualLength); await archiveStream.WriteAsync(new byte[paddingAfterData], cancellationToken).ConfigureAwait(false); }
// Writes the current header's data stream into the archive stream. private static void WriteData(Stream archiveStream, Stream dataStream, long actualLength) { dataStream.CopyTo(archiveStream); // The data gets copied from the current position int paddingAfterData = TarHelpers.CalculatePadding(actualLength); if (paddingAfterData != 0) { Debug.Assert(paddingAfterData <= TarHelpers.RecordSize); Span <byte> padding = stackalloc byte[TarHelpers.RecordSize]; padding = padding.Slice(0, paddingAfterData); padding.Clear(); archiveStream.Write(padding); } }
// Asynchronously writes the current header's data stream into the archive stream. private static async Task WriteDataAsync(Stream archiveStream, Stream dataStream, long actualLength, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); await dataStream.CopyToAsync(archiveStream, cancellationToken).ConfigureAwait(false); // The data gets copied from the current position int paddingAfterData = TarHelpers.CalculatePadding(actualLength); if (paddingAfterData != 0) { byte[] buffer = ArrayPool <byte> .Shared.Rent(paddingAfterData); Array.Clear(buffer, 0, paddingAfterData); await archiveStream.WriteAsync(buffer.AsMemory(0, paddingAfterData), cancellationToken).ConfigureAwait(false); ArrayPool <byte> .Shared.Return(buffer); } }