public void Write(string filename, Stream source, DateTime? modificationTime, long? size) { if (!source.CanSeek && size == null) { throw new ArgumentException("Seekable stream is required if no size is given."); } long realSize = size ?? source.Length; TarHeader header = new TarHeader(); header.LastModifiedTime = modificationTime ?? TarHeader.Epoch; header.Name = NormalizeFilename(filename); header.Size = realSize; header.Write(OutputStream); size = source.TransferTo(OutputStream); PadTo512(size.Value, false); }
public void Write(string filename, Stream source, DateTime? modificationTime, long? size) { if (!(source.CanSeek || size.HasValue)) { throw new ArgumentException("Seekable stream is required if no size is given."); } long? nullable = size; long num = nullable.HasValue ? nullable.GetValueOrDefault() : source.Length; TarHeader header = new TarHeader(); DateTime? nullable2 = modificationTime; header.LastModifiedTime = nullable2.HasValue ? nullable2.GetValueOrDefault() : TarHeader.Epoch; header.Name = this.NormalizeFilename(filename); header.Size = num; header.Write(base.OutputStream); size = new long?(Utility.TransferTo(source, base.OutputStream)); this.PadTo512(size.Value, false); }
internal static IEnumerable<TarHeader> ReadHeader(StreamingMode mode, Stream stream) { TarHeader iteratorVariable0; bool flag2; goto Label_012E; Label_010E: yield return iteratorVariable0; Label_012E: flag2 = true; iteratorVariable0 = null; try { BinaryReader reader = new BinaryReader(stream); iteratorVariable0 = new TarHeader(); if (iteratorVariable0.Read(reader)) { switch (mode) { case StreamingMode.Streaming: iteratorVariable0.PackedStream = new TarReadOnlySubStream(stream, iteratorVariable0.Size); goto Label_010E; case StreamingMode.Seekable: { iteratorVariable0.DataStartPosition = new long?(reader.BaseStream.Position); Stream baseStream = reader.BaseStream; baseStream.Position += PadTo512(iteratorVariable0.Size); goto Label_010E; } } throw new InvalidFormatException("Invalid StreamingMode"); } goto Label_0135; } catch { iteratorVariable0 = null; } goto Label_010E; Label_0135:; }
internal static IEnumerable<TarHeader> ReadHeader(StreamingMode mode, Stream stream) { while (true) { TarHeader header = null; try { BinaryReader reader = new BinaryReader(stream); header = new TarHeader(); if (!header.Read(reader)) { yield break; } switch (mode) { case StreamingMode.Seekable: { header.DataStartPosition = reader.BaseStream.Position; //skip to nearest 512 reader.BaseStream.Position += PadTo512(header.Size); } break; case StreamingMode.Streaming: { header.PackedStream = new TarReadOnlySubStream(stream, header.Size); } break; default: { throw new InvalidFormatException("Invalid StreamingMode"); } } } catch { header = null; } yield return header; } }
internal static IEnumerable<TarHeader> ReadHeaderNonseekable(Stream stream) { while (true) { TarHeader header = null; try { BinaryReader reader = new BinaryReader(stream); header = new TarHeader(); if (!header.Read(reader)) { yield break; } header.PackedStream = new TarReadOnlySubStream(stream, header.Size); } catch { header = null; } yield return header; } }
internal TarFilePart(TarHeader header, Stream seekableStream) { this.seekableStream = seekableStream; this.Header = header; }
internal TarFilePart(TarHeader header) { this.Header = header; }