public void TestIncompleteRewind()
 {
     MemoryStream ms = new MemoryStream();
     BinaryWriter bw = new BinaryWriter(ms);
     bw.Write(1);
     bw.Write(2);
     bw.Write(3);
     bw.Write(4);
     bw.Write(5);
     bw.Write(6);
     bw.Write(7);
     bw.Flush();
     ms.Position = 0;
     RewindableStream stream = new RewindableStream(ms);
     stream.StartRecording();
     BinaryReader br = new BinaryReader(stream);
     Assert.AreEqual(br.ReadInt32(), 1);
     Assert.AreEqual(br.ReadInt32(), 2);
     Assert.AreEqual(br.ReadInt32(), 3);
     Assert.AreEqual(br.ReadInt32(), 4);
     stream.Rewind(true);
     Assert.AreEqual(br.ReadInt32(), 1);
     Assert.AreEqual(br.ReadInt32(), 2);
     stream.StartRecording();
     Assert.AreEqual(br.ReadInt32(), 3);
     Assert.AreEqual(br.ReadInt32(), 4);
     Assert.AreEqual(br.ReadInt32(), 5);
     stream.Rewind(true);
     Assert.AreEqual(br.ReadInt32(), 3);
     Assert.AreEqual(br.ReadInt32(), 4);
     Assert.AreEqual(br.ReadInt32(), 5);
     Assert.AreEqual(br.ReadInt32(), 6);
     Assert.AreEqual(br.ReadInt32(), 7);
 }
Esempio n. 2
0
        /// <summary>
        /// Opens a Reader for Non-seeking usage
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static IReader Open(Stream stream, Options options = Options.KeepStreamsOpen)
        {
            stream.CheckNotNull("stream");

            RewindableStream rewindableStream = new RewindableStream(stream);
            rewindableStream.StartRecording();
            if (ZipArchive.IsZipFile(rewindableStream, null))
            {
                rewindableStream.Rewind(true);
                return ZipReader.Open(rewindableStream, null, options);
            }
            rewindableStream.Rewind(false);
            if (GZipArchive.IsGZipFile(rewindableStream))
            {
                rewindableStream.Rewind(false);
                GZipStream testStream = new GZipStream(rewindableStream, CompressionMode.Decompress);
                if (TarArchive.IsTarFile(testStream))
                {
                    rewindableStream.Rewind(true);
                    return new TarReader(rewindableStream, CompressionType.GZip, options);
                }
                rewindableStream.Rewind(true);
                return GZipReader.Open(rewindableStream, options);
            }

            rewindableStream.Rewind(false);
            if (BZip2Stream.IsBZip2(rewindableStream))
            {
                rewindableStream.Rewind(false);
                BZip2Stream testStream = new BZip2Stream(rewindableStream, CompressionMode.Decompress, false);
                if (TarArchive.IsTarFile(testStream))
                {
                    rewindableStream.Rewind(true);
                    return new TarReader(rewindableStream, CompressionType.BZip2, options);
                }
            }

            rewindableStream.Rewind(false);
            if (TarArchive.IsTarFile(rewindableStream))
            {
                rewindableStream.Rewind(true);
                return TarReader.Open(rewindableStream, options);
            }
            rewindableStream.Rewind(false);
            if (RarArchive.IsRarFile(rewindableStream, options))
            {
                rewindableStream.Rewind(true);
                return RarReader.Open(rewindableStream, options);
            }

            throw new InvalidOperationException("Cannot determine compressed stream type.");
        }
Esempio n. 3
0
 public static IReader Open(Stream stream,  Options options)
 {
     Utility.CheckNotNull(stream, "stream");
     RewindableStream stream2 = new RewindableStream(stream);
     stream2.StartRecording();
     if (ZipArchive.IsZipFile(stream2, null))
     {
         stream2.Rewind(true);
         return ZipReader.Open(stream2, null, options);
     }
     stream2.Rewind(false);
     if (GZipArchive.IsGZipFile(stream2))
     {
         stream2.Rewind(false);
         GZipStream stream3 = new GZipStream(stream2, CompressionMode.Decompress);
         if (TarArchive.IsTarFile(stream3))
         {
             stream2.Rewind(true);
             return new TarReader(stream2, CompressionType.GZip, options);
         }
         stream2.Rewind(true);
         return GZipReader.Open(stream2, options);
     }
     stream2.Rewind(false);
     if (BZip2Stream.IsBZip2(stream2))
     {
         stream2.Rewind(false);
         BZip2Stream stream4 = new BZip2Stream(stream2, CompressionMode.Decompress, false, false);
         if (TarArchive.IsTarFile(stream4))
         {
             stream2.Rewind(true);
             return new TarReader(stream2, CompressionType.BZip2, options);
         }
     }
     stream2.Rewind(false);
     if (TarArchive.IsTarFile(stream2))
     {
         stream2.Rewind(true);
         return TarReader.Open(stream2, options);
     }
     stream2.Rewind(false);
     if (!RarArchive.IsRarFile(stream2, options))
     {
         throw new InvalidOperationException("Cannot determine compressed stream type.  Supported Reader Formats: Zip, GZip, BZip2, Tar, Rar");
     }
     stream2.Rewind(true);
     return RarReader.Open(stream2, options);
 }