public static void WriteTo(this IArchiveEntry archiveEntry, Stream streamToWriteTo)
        {
            if (archiveEntry.Archive.Type == ArchiveType.Rar && archiveEntry.Archive.IsSolid)
            {
                throw new InvalidFormatException("Cannot use Archive random access on SOLID Rar files.");
            }

            if (archiveEntry.IsDirectory)
            {
                throw new ExtractionException("Entry is a file directory and cannot be extracted.");
            }

            var streamListener = archiveEntry.Archive as IArchiveExtractionListener;
            streamListener.EnsureEntriesLoaded();
            streamListener.FireEntryExtractionBegin(archiveEntry);
            streamListener.FireFilePartExtractionBegin(archiveEntry.Key, archiveEntry.Size, archiveEntry.CompressedSize);
            var entryStream = archiveEntry.OpenEntryStream();
            if (entryStream == null)
            {
                return;
            }
            using (entryStream)
            using (Stream s = new ListeningStream(streamListener, entryStream))
            {
                s.TransferTo(streamToWriteTo);
            }
            streamListener.FireEntryExtractionEnd(archiveEntry);
        }
 public static void WriteTo(IArchiveEntry archiveEntry, Stream streamToWriteTo)
 {
     if ((archiveEntry.Archive.Type == ArchiveType.Rar) && archiveEntry.Archive.IsSolid)
     {
         throw new InvalidFormatException("Cannot use Archive random access on SOLID Rar files.");
     }
     if (archiveEntry.IsDirectory)
     {
         throw new ExtractionException("Entry is a file directory and cannot be extracted.");
     }
     IArchiveExtractionListener archive = archiveEntry.Archive as IArchiveExtractionListener;
     archive.EnsureEntriesLoaded();
     archive.FireEntryExtractionBegin(archiveEntry);
     archive.FireFilePartExtractionBegin(archiveEntry.Key, archiveEntry.Size, archiveEntry.CompressedSize);
     Stream stream = archiveEntry.OpenEntryStream();
     if (stream != null)
     {
         using (stream)
         {
             using (Stream stream2 = new ListeningStream(archive, stream))
             {
                 Utility.TransferTo(stream2, streamToWriteTo);
             }
         }
         archive.FireEntryExtractionEnd(archiveEntry);
     }
 }