Beispiel #1
0
        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);
        }
Beispiel #2
0
 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:;
        }
Beispiel #4
0
 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;
 }