diff --git a/SharpCompress/Archive/Rar/RarArchive.cs b/SharpCompress/Archive/Rar/RarArchive.cs index 4eaada0a..f7f88b39 100644 --- a/SharpCompress/Archive/Rar/RarArchive.cs +++ b/SharpCompress/Archive/Rar/RarArchive.cs @@ -14,9 +14,6 @@ namespace SharpCompress.Archive.Rar { public class RarArchive : AbstractArchive { - internal IEnumerator SolidEntryEnumerator; - internal List SolidReadedEntries=new List(); - private readonly Unpack unpack = new Unpack(); internal Unpack Unpack diff --git a/SharpCompress/Archive/Rar/RarArchiveEntry.cs b/SharpCompress/Archive/Rar/RarArchiveEntry.cs index ab033514..9b69100b 100644 --- a/SharpCompress/Archive/Rar/RarArchiveEntry.cs +++ b/SharpCompress/Archive/Rar/RarArchiveEntry.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -70,43 +71,12 @@ namespace SharpCompress.Archive.Rar return parts.Aggregate(0L, (total, fp) => { return total + fp.FileHeader.CompressedSize; }); } } - private readonly byte[] skipBuffer = new byte[4096]; - private void Skip(RarArchiveEntry en) - { - using (var s = new RarStream(archive.Unpack, en.FileHeader, new MultiVolumeReadOnlyStream(en.parts, archive))) - { - while (s.Read(skipBuffer, 0, skipBuffer.Length) > 0); - } - } - - private void MoveNext() - { - archive.SolidReadedEntries.Add(archive.SolidEntryEnumerator.Current); - if (!archive.SolidEntryEnumerator.MoveNext()) - { - archive.SolidEntryEnumerator = archive.Entries.GetEnumerator(); - archive.SolidReadedEntries = new List(); - archive.SolidEntryEnumerator.MoveNext(); - } - } public Stream OpenEntryStream() { if (archive.IsSolid) { - - if ((archive.SolidEntryEnumerator == null) || (archive.SolidReadedEntries.Any(b=>b.FileHeader==FileHeader))) - { - archive.SolidEntryEnumerator = archive.Entries.GetEnumerator(); - archive.SolidReadedEntries = new List(); - archive.SolidEntryEnumerator.MoveNext(); - } - while (archive.SolidEntryEnumerator.Current.FileHeader != FileHeader) - { - Skip(archive.SolidEntryEnumerator.Current); - MoveNext(); - } - MoveNext(); + throw new InvalidOperationException("Use ExtractAllEntries to extract SOLID archives."); } return new RarStream(archive.Unpack, FileHeader, new MultiVolumeReadOnlyStream(Parts.Cast(), archive)); } diff --git a/SharpCompress/Archive/SevenZip/SevenZipArchiveEntry.cs b/SharpCompress/Archive/SevenZip/SevenZipArchiveEntry.cs index ca893e22..7f60328a 100644 --- a/SharpCompress/Archive/SevenZip/SevenZipArchiveEntry.cs +++ b/SharpCompress/Archive/SevenZip/SevenZipArchiveEntry.cs @@ -1,4 +1,5 @@ -using System.IO; +using System; +using System.IO; using SharpCompress.Common.SevenZip; namespace SharpCompress.Archive.SevenZip @@ -13,6 +14,10 @@ namespace SharpCompress.Archive.SevenZip public Stream OpenEntryStream() { + if (Archive.IsSolid) + { + throw new InvalidOperationException("Use ExtractAllEntries to extract SOLID archives."); + } return FilePart.GetCompressedStream(); } public IArchive Archive { get; private set; }