mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-09-22 15:04:43 +00:00
First pass of removing explicit leaveOpen on streams.
This commit is contained in:
@@ -30,7 +30,7 @@ namespace SharpCompress.Common.GZip
|
||||
|
||||
internal override Stream GetCompressedStream()
|
||||
{
|
||||
return new DeflateStream(_stream, CompressionMode.Decompress, CompressionLevel.Default, false);
|
||||
return new DeflateStream(_stream, CompressionMode.Decompress, CompressionLevel.Default);
|
||||
}
|
||||
|
||||
internal override Stream GetRawStream()
|
||||
|
||||
@@ -90,14 +90,11 @@ namespace SharpCompress.Common.Rar.Headers
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (!Options.LeaveStreamOpen)
|
||||
{
|
||||
#if NET35
|
||||
reader.Close();
|
||||
reader.Close();
|
||||
#else
|
||||
reader.Dispose();
|
||||
reader.Dispose();
|
||||
#endif
|
||||
}
|
||||
throw new InvalidFormatException("Error trying to read rar signature.", e);
|
||||
}
|
||||
return stream;
|
||||
|
||||
@@ -24,7 +24,6 @@ namespace SharpCompress.Common.SevenZip
|
||||
}
|
||||
}
|
||||
|
||||
internal Stream BaseStream { get; private set; }
|
||||
internal CFileItem Header { get; }
|
||||
internal CFolder Folder { get; }
|
||||
internal int Index { get; }
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace SharpCompress.Common
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (!ReaderOptions.LeaveStreamOpen && !disposed)
|
||||
if (!disposed)
|
||||
{
|
||||
actualStream.Dispose();
|
||||
disposed = true;
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace SharpCompress.Common.Zip
|
||||
}
|
||||
case ZipCompressionMethod.BZip2:
|
||||
{
|
||||
return new BZip2Stream(stream, CompressionMode.Decompress);
|
||||
return new BZip2Stream(stream, CompressionMode.Decompress, false);
|
||||
}
|
||||
case ZipCompressionMethod.LZMA:
|
||||
{
|
||||
|
||||
@@ -12,19 +12,18 @@ namespace SharpCompress.Compressors.BZip2
|
||||
/// </summary>
|
||||
/// <param name="stream">The stream to read from</param>
|
||||
/// <param name="compressionMode">Compression Mode</param>
|
||||
/// <param name="leaveOpen">Leave the underlying stream open when disposed.</param>
|
||||
/// <param name="decompressContacted">Should the BZip2 stream continue to decompress the stream when the End Marker is found.</param>
|
||||
public BZip2Stream(Stream stream, CompressionMode compressionMode, bool leaveOpen = false,
|
||||
bool decompressContacted = false)
|
||||
/// <param name="decompressConcatenated">Decompress Concatenated</param>
|
||||
public BZip2Stream(Stream stream, CompressionMode compressionMode,
|
||||
bool decompressConcatenated)
|
||||
{
|
||||
Mode = compressionMode;
|
||||
if (Mode == CompressionMode.Compress)
|
||||
{
|
||||
this.stream = new CBZip2OutputStream(stream, leaveOpen);
|
||||
this.stream = new CBZip2OutputStream(stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.stream = new CBZip2InputStream(stream, decompressContacted, leaveOpen);
|
||||
this.stream = new CBZip2InputStream(stream, decompressConcatenated);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -119,7 +119,6 @@ namespace SharpCompress.Compressors.BZip2
|
||||
private readonly int[] minLens = new int[BZip2Constants.N_GROUPS];
|
||||
|
||||
private Stream bsStream;
|
||||
private bool leaveOpen;
|
||||
|
||||
private bool streamEnd;
|
||||
|
||||
@@ -147,12 +146,12 @@ namespace SharpCompress.Compressors.BZip2
|
||||
private char z;
|
||||
private bool isDisposed;
|
||||
|
||||
public CBZip2InputStream(Stream zStream, bool decompressConcatenated, bool leaveOpen)
|
||||
public CBZip2InputStream(Stream zStream, bool decompressConcatenated)
|
||||
{
|
||||
this.decompressConcatenated = decompressConcatenated;
|
||||
ll8 = null;
|
||||
tt = null;
|
||||
BsSetStream(zStream, leaveOpen);
|
||||
BsSetStream(zStream);
|
||||
Initialize(true);
|
||||
InitBlock();
|
||||
SetupBlock();
|
||||
@@ -354,29 +353,15 @@ namespace SharpCompress.Compressors.BZip2
|
||||
|
||||
private void BsFinishedWithStream()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (bsStream != null)
|
||||
{
|
||||
if (!leaveOpen)
|
||||
{
|
||||
bsStream.Dispose();
|
||||
}
|
||||
bsStream = null;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
//ignore
|
||||
}
|
||||
bsStream?.Dispose();
|
||||
bsStream = null;
|
||||
}
|
||||
|
||||
private void BsSetStream(Stream f, bool leaveOpen)
|
||||
private void BsSetStream(Stream f)
|
||||
{
|
||||
bsStream = f;
|
||||
bsLive = 0;
|
||||
bsBuff = 0;
|
||||
this.leaveOpen = leaveOpen;
|
||||
}
|
||||
|
||||
private int BsR(int n)
|
||||
|
||||
@@ -303,16 +303,11 @@ namespace SharpCompress.Compressors.BZip2
|
||||
private int runLength;
|
||||
|
||||
public CBZip2OutputStream(Stream inStream)
|
||||
: this(inStream, 9, false)
|
||||
: this(inStream, 9)
|
||||
{
|
||||
}
|
||||
|
||||
public CBZip2OutputStream(Stream inStream, bool leaveOpen)
|
||||
: this(inStream, 9, leaveOpen)
|
||||
{
|
||||
}
|
||||
|
||||
public CBZip2OutputStream(Stream inStream, int inBlockSize, bool leaveOpen)
|
||||
public CBZip2OutputStream(Stream inStream, int inBlockSize)
|
||||
{
|
||||
block = null;
|
||||
quadrant = null;
|
||||
@@ -322,7 +317,7 @@ namespace SharpCompress.Compressors.BZip2
|
||||
inStream.WriteByte((byte)'B');
|
||||
inStream.WriteByte((byte)'Z');
|
||||
|
||||
BsSetStream(inStream, leaveOpen);
|
||||
BsSetStream(inStream);
|
||||
|
||||
workFactor = 50;
|
||||
if (inBlockSize > 9)
|
||||
@@ -441,10 +436,7 @@ namespace SharpCompress.Compressors.BZip2
|
||||
|
||||
disposed = true;
|
||||
base.Dispose();
|
||||
if (!leaveOpen)
|
||||
{
|
||||
bsStream.Dispose();
|
||||
}
|
||||
bsStream?.Dispose();
|
||||
bsStream = null;
|
||||
}
|
||||
}
|
||||
@@ -596,13 +588,12 @@ namespace SharpCompress.Compressors.BZip2
|
||||
}
|
||||
}
|
||||
|
||||
private void BsSetStream(Stream f, bool leaveOpen)
|
||||
private void BsSetStream(Stream f)
|
||||
{
|
||||
bsStream = f;
|
||||
bsLive = 0;
|
||||
bsBuff = 0;
|
||||
bytesOut = 0;
|
||||
this.leaveOpen = leaveOpen;
|
||||
}
|
||||
|
||||
private void BsFinishedWithStream()
|
||||
@@ -1057,7 +1048,6 @@ namespace SharpCompress.Compressors.BZip2
|
||||
}
|
||||
|
||||
private Stream bsStream;
|
||||
private bool leaveOpen;
|
||||
|
||||
private void SimpleSort(int lo, int hi, int d)
|
||||
{
|
||||
|
||||
@@ -37,10 +37,9 @@ namespace SharpCompress.Compressors.Deflate
|
||||
|
||||
public DeflateStream(Stream stream, CompressionMode mode,
|
||||
CompressionLevel level = CompressionLevel.Default,
|
||||
bool leaveOpen = false,
|
||||
Encoding forceEncoding = null)
|
||||
{
|
||||
_baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.DEFLATE, leaveOpen, forceEncoding);
|
||||
_baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.DEFLATE, forceEncoding);
|
||||
}
|
||||
|
||||
#region Zlib properties
|
||||
@@ -216,7 +215,6 @@ namespace SharpCompress.Compressors.Deflate
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This may or may not result in a <c>Close()</c> call on the captive stream.
|
||||
/// See the constructors that have a <c>leaveOpen</c> parameter for more information.
|
||||
/// </remarks>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
@@ -224,9 +222,9 @@ namespace SharpCompress.Compressors.Deflate
|
||||
{
|
||||
if (!_disposed)
|
||||
{
|
||||
if (disposing && (_baseStream != null))
|
||||
if (disposing)
|
||||
{
|
||||
_baseStream.Dispose();
|
||||
_baseStream?.Dispose();
|
||||
}
|
||||
_disposed = true;
|
||||
}
|
||||
|
||||
@@ -51,23 +51,18 @@ namespace SharpCompress.Compressors.Deflate
|
||||
private readonly Encoding _encoding;
|
||||
|
||||
public GZipStream(Stream stream, CompressionMode mode)
|
||||
: this(stream, mode, CompressionLevel.Default, false, Encoding.UTF8)
|
||||
: this(stream, mode, CompressionLevel.Default, Encoding.UTF8)
|
||||
{
|
||||
}
|
||||
|
||||
public GZipStream(Stream stream, CompressionMode mode, CompressionLevel level)
|
||||
: this(stream, mode, level, false, Encoding.UTF8)
|
||||
: this(stream, mode, level, Encoding.UTF8)
|
||||
{
|
||||
}
|
||||
|
||||
public GZipStream(Stream stream, CompressionMode mode, bool leaveOpen)
|
||||
: this(stream, mode, CompressionLevel.Default, leaveOpen, Encoding.UTF8)
|
||||
public GZipStream(Stream stream, CompressionMode mode, CompressionLevel level, Encoding encoding)
|
||||
{
|
||||
}
|
||||
|
||||
public GZipStream(Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen, Encoding encoding)
|
||||
{
|
||||
BaseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.GZIP, leaveOpen, encoding);
|
||||
BaseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.GZIP, encoding);
|
||||
_encoding = encoding;
|
||||
}
|
||||
|
||||
@@ -200,7 +195,6 @@ namespace SharpCompress.Compressors.Deflate
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This may or may not result in a <c>Close()</c> call on the captive stream.
|
||||
/// See the doc on constructors that take a <c>leaveOpen</c> parameter for more information.
|
||||
/// </remarks>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
|
||||
@@ -50,7 +50,6 @@ namespace SharpCompress.Compressors.Deflate
|
||||
protected internal ZlibStreamFlavor _flavor;
|
||||
protected internal CompressionMode _compressionMode;
|
||||
protected internal CompressionLevel _level;
|
||||
protected internal bool _leaveOpen;
|
||||
protected internal byte[] _workingBuffer;
|
||||
protected internal int _bufferSize = ZlibConstants.WorkingBufferSizeDefault;
|
||||
protected internal byte[] _buf1 = new byte[1];
|
||||
@@ -83,14 +82,12 @@ namespace SharpCompress.Compressors.Deflate
|
||||
CompressionMode compressionMode,
|
||||
CompressionLevel level,
|
||||
ZlibStreamFlavor flavor,
|
||||
bool leaveOpen,
|
||||
Encoding encoding)
|
||||
{
|
||||
_flushMode = FlushType.None;
|
||||
|
||||
//this._workingBuffer = new byte[WORKING_BUFFER_SIZE_DEFAULT];
|
||||
_stream = stream;
|
||||
_leaveOpen = leaveOpen;
|
||||
_compressionMode = compressionMode;
|
||||
_flavor = flavor;
|
||||
_level = level;
|
||||
@@ -361,10 +358,7 @@ namespace SharpCompress.Compressors.Deflate
|
||||
finally
|
||||
{
|
||||
end();
|
||||
if (!_leaveOpen)
|
||||
{
|
||||
_stream.Dispose();
|
||||
}
|
||||
_stream?.Dispose();
|
||||
_stream = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,23 +37,18 @@ namespace SharpCompress.Compressors.Deflate
|
||||
private bool _disposed;
|
||||
|
||||
public ZlibStream(Stream stream, CompressionMode mode)
|
||||
: this(stream, mode, CompressionLevel.Default, false, Encoding.UTF8)
|
||||
: this(stream, mode, CompressionLevel.Default, Encoding.UTF8)
|
||||
{
|
||||
}
|
||||
|
||||
public ZlibStream(Stream stream, CompressionMode mode, CompressionLevel level)
|
||||
: this(stream, mode, level, false, Encoding.UTF8)
|
||||
: this(stream, mode, level, Encoding.UTF8)
|
||||
{
|
||||
}
|
||||
|
||||
public ZlibStream(Stream stream, CompressionMode mode, bool leaveOpen)
|
||||
: this(stream, mode, CompressionLevel.Default, leaveOpen, Encoding.UTF8)
|
||||
public ZlibStream(Stream stream, CompressionMode mode, CompressionLevel level, Encoding encoding)
|
||||
{
|
||||
}
|
||||
|
||||
public ZlibStream(Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen, Encoding encoding)
|
||||
{
|
||||
_baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.ZLIB, leaveOpen, encoding);
|
||||
_baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.ZLIB, encoding);
|
||||
}
|
||||
|
||||
#region Zlib properties
|
||||
@@ -208,7 +203,6 @@ namespace SharpCompress.Compressors.Deflate
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This may or may not result in a <c>Close()</c> call on the captive stream.
|
||||
/// See the constructors that have a <c>leaveOpen</c> parameter for more information.
|
||||
/// </remarks>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
@@ -216,9 +210,9 @@ namespace SharpCompress.Compressors.Deflate
|
||||
{
|
||||
if (!_disposed)
|
||||
{
|
||||
if (disposing && (_baseStream != null))
|
||||
if (disposing)
|
||||
{
|
||||
_baseStream.Dispose();
|
||||
_baseStream?.Dispose();
|
||||
}
|
||||
_disposed = true;
|
||||
}
|
||||
|
||||
@@ -11,19 +11,16 @@ using System.Runtime.CompilerServices;
|
||||
|
||||
namespace SharpCompress.Compressors.Deflate64
|
||||
{
|
||||
public sealed partial class Deflate64Stream : Stream
|
||||
public sealed class Deflate64Stream : Stream
|
||||
{
|
||||
internal const int DefaultBufferSize = 8192;
|
||||
private const int DefaultBufferSize = 8192;
|
||||
|
||||
private Stream _stream;
|
||||
private CompressionMode _mode;
|
||||
private bool _leaveOpen;
|
||||
private InflaterManaged _inflater;
|
||||
private byte[] _buffer;
|
||||
|
||||
public Deflate64Stream(Stream stream, CompressionMode mode,
|
||||
CompressionLevel level = CompressionLevel.Default,
|
||||
bool leaveOpen = false)
|
||||
public Deflate64Stream(Stream stream, CompressionMode mode)
|
||||
{
|
||||
if (stream == null)
|
||||
throw new ArgumentNullException(nameof(stream));
|
||||
@@ -32,13 +29,13 @@ namespace SharpCompress.Compressors.Deflate64
|
||||
if (!stream.CanRead)
|
||||
throw new ArgumentException("Deflate64: input stream is not readable", nameof(stream));
|
||||
|
||||
InitializeInflater(stream, leaveOpen, ZipCompressionMethod.Deflate64);
|
||||
InitializeInflater(stream, ZipCompressionMethod.Deflate64);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets up this DeflateManagedStream to be used for Inflation/Decompression
|
||||
/// </summary>
|
||||
internal void InitializeInflater(Stream stream, bool leaveOpen, ZipCompressionMethod method = ZipCompressionMethod.Deflate)
|
||||
internal void InitializeInflater(Stream stream, ZipCompressionMethod method = ZipCompressionMethod.Deflate)
|
||||
{
|
||||
Debug.Assert(stream != null);
|
||||
Debug.Assert(method == ZipCompressionMethod.Deflate || method == ZipCompressionMethod.Deflate64);
|
||||
@@ -49,7 +46,6 @@ namespace SharpCompress.Compressors.Deflate64
|
||||
|
||||
_stream = stream;
|
||||
_mode = CompressionMode.Decompress;
|
||||
_leaveOpen = leaveOpen;
|
||||
_buffer = new byte[DefaultBufferSize];
|
||||
}
|
||||
|
||||
@@ -234,8 +230,10 @@ namespace SharpCompress.Compressors.Deflate64
|
||||
// In this case, we still need to clean up internal resources, hence the inner finally blocks.
|
||||
try
|
||||
{
|
||||
if (disposing && !_leaveOpen && _stream != null)
|
||||
_stream.Dispose();
|
||||
if (disposing)
|
||||
{
|
||||
_stream?.Dispose();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
@@ -19,15 +19,13 @@ namespace SharpCompress.Compressors.LZMA
|
||||
private readonly Stream stream;
|
||||
private readonly CountingWritableSubStream rawStream;
|
||||
private bool disposed;
|
||||
private readonly bool leaveOpen;
|
||||
private bool finished;
|
||||
|
||||
private long writeCount;
|
||||
|
||||
public LZipStream(Stream stream, CompressionMode mode, bool leaveOpen = false)
|
||||
public LZipStream(Stream stream, CompressionMode mode)
|
||||
{
|
||||
Mode = mode;
|
||||
this.leaveOpen = leaveOpen;
|
||||
|
||||
if (mode == CompressionMode.Decompress)
|
||||
{
|
||||
@@ -87,10 +85,7 @@ namespace SharpCompress.Compressors.LZMA
|
||||
if (disposing)
|
||||
{
|
||||
Finish();
|
||||
if (!leaveOpen)
|
||||
{
|
||||
rawStream.Dispose();
|
||||
}
|
||||
rawStream?.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,17 +1,24 @@
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace SharpCompress.IO
|
||||
{
|
||||
internal class NonDisposingStream : Stream
|
||||
{
|
||||
public NonDisposingStream(Stream stream)
|
||||
public NonDisposingStream(Stream stream, bool throwOnDispose = false)
|
||||
{
|
||||
Stream = stream;
|
||||
ThrowOnDispose = false;
|
||||
}
|
||||
|
||||
public bool ThrowOnDispose { get; set; }
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
//don't dispose anything
|
||||
if (ThrowOnDispose)
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
public Stream Stream { get; }
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace SharpCompress.Readers
|
||||
if (BZip2Stream.IsBZip2(rewindableStream))
|
||||
{
|
||||
rewindableStream.Rewind(false);
|
||||
BZip2Stream testStream = new BZip2Stream(rewindableStream, CompressionMode.Decompress, true);
|
||||
BZip2Stream testStream = new BZip2Stream(new NonDisposingStream(rewindableStream), CompressionMode.Decompress, false);
|
||||
if (TarArchive.IsTarFile(testStream))
|
||||
{
|
||||
rewindableStream.Rewind(true);
|
||||
@@ -70,7 +70,7 @@ namespace SharpCompress.Readers
|
||||
if (LZipStream.IsLZipFile(rewindableStream))
|
||||
{
|
||||
rewindableStream.Rewind(false);
|
||||
LZipStream testStream = new LZipStream(rewindableStream, CompressionMode.Decompress, true);
|
||||
LZipStream testStream = new LZipStream(new NonDisposingStream(rewindableStream), CompressionMode.Decompress);
|
||||
if (TarArchive.IsTarFile(testStream))
|
||||
{
|
||||
rewindableStream.Rewind(true);
|
||||
|
||||
@@ -102,7 +102,7 @@ namespace SharpCompress.Readers.Tar
|
||||
if (LZipStream.IsLZipFile(rewindableStream))
|
||||
{
|
||||
rewindableStream.Rewind(false);
|
||||
LZipStream testStream = new LZipStream(rewindableStream, CompressionMode.Decompress, false);
|
||||
LZipStream testStream = new LZipStream(rewindableStream, CompressionMode.Decompress);
|
||||
if (TarArchive.IsTarFile(testStream))
|
||||
{
|
||||
rewindableStream.Rewind(true);
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.IO;
|
||||
using SharpCompress.Common;
|
||||
using SharpCompress.Compressors;
|
||||
using SharpCompress.Compressors.Deflate;
|
||||
using SharpCompress.IO;
|
||||
|
||||
namespace SharpCompress.Writers.GZip
|
||||
{
|
||||
@@ -13,9 +14,12 @@ namespace SharpCompress.Writers.GZip
|
||||
public GZipWriter(Stream destination, GZipWriterOptions options = null)
|
||||
: base(ArchiveType.GZip, options ?? new GZipWriterOptions())
|
||||
{
|
||||
if (WriterOptions.LeaveStreamOpen)
|
||||
{
|
||||
destination = new NonDisposingStream(destination);
|
||||
}
|
||||
InitalizeStream(new GZipStream(destination, CompressionMode.Compress,
|
||||
options?.CompressionLevel ?? CompressionLevel.Default,
|
||||
WriterOptions.LeaveStreamOpen,
|
||||
options?.CompressionLevel ?? CompressionLevel.Default,
|
||||
WriterOptions.ArchiveEncoding.GetEncoding()));
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ using SharpCompress.Compressors;
|
||||
using SharpCompress.Compressors.BZip2;
|
||||
using SharpCompress.Compressors.Deflate;
|
||||
using SharpCompress.Compressors.LZMA;
|
||||
using SharpCompress.IO;
|
||||
|
||||
namespace SharpCompress.Writers.Tar
|
||||
{
|
||||
@@ -22,23 +23,27 @@ namespace SharpCompress.Writers.Tar
|
||||
{
|
||||
throw new ArgumentException("Tars require writable streams.");
|
||||
}
|
||||
if (WriterOptions.LeaveStreamOpen)
|
||||
{
|
||||
destination = new NonDisposingStream(destination);
|
||||
}
|
||||
switch (options.CompressionType)
|
||||
{
|
||||
case CompressionType.None:
|
||||
break;
|
||||
case CompressionType.BZip2:
|
||||
{
|
||||
destination = new BZip2Stream(destination, CompressionMode.Compress, true);
|
||||
destination = new BZip2Stream(destination, CompressionMode.Compress, false);
|
||||
}
|
||||
break;
|
||||
case CompressionType.GZip:
|
||||
{
|
||||
destination = new GZipStream(destination, CompressionMode.Compress, true);
|
||||
destination = new GZipStream(destination, CompressionMode.Compress);
|
||||
}
|
||||
break;
|
||||
case CompressionType.LZip:
|
||||
{
|
||||
destination = new LZipStream(destination, CompressionMode.Compress, true);
|
||||
destination = new LZipStream(destination, CompressionMode.Compress);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -37,6 +37,11 @@ namespace SharpCompress.Writers.Zip
|
||||
|
||||
compressionType = zipWriterOptions.CompressionType;
|
||||
compressionLevel = zipWriterOptions.DeflateCompressionLevel;
|
||||
|
||||
if (WriterOptions.LeaveStreamOpen)
|
||||
{
|
||||
destination = new NonDisposingStream(destination);
|
||||
}
|
||||
InitalizeStream(destination);
|
||||
}
|
||||
|
||||
@@ -312,12 +317,11 @@ namespace SharpCompress.Writers.Zip
|
||||
}
|
||||
case ZipCompressionMethod.Deflate:
|
||||
{
|
||||
return new DeflateStream(counting, CompressionMode.Compress, compressionLevel,
|
||||
true);
|
||||
return new DeflateStream(counting, CompressionMode.Compress, compressionLevel);
|
||||
}
|
||||
case ZipCompressionMethod.BZip2:
|
||||
{
|
||||
return new BZip2Stream(counting, CompressionMode.Compress, true);
|
||||
return new BZip2Stream(counting, CompressionMode.Compress, false);
|
||||
}
|
||||
case ZipCompressionMethod.LZMA:
|
||||
{
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using SharpCompress.Archives;
|
||||
using SharpCompress.Common;
|
||||
using SharpCompress.IO;
|
||||
using SharpCompress.Readers;
|
||||
using Xunit;
|
||||
|
||||
@@ -23,7 +24,7 @@ namespace SharpCompress.Test
|
||||
foreach (var path in testArchives)
|
||||
{
|
||||
ResetScratch();
|
||||
using (Stream stream = File.OpenRead(path))
|
||||
using (var stream = new NonDisposingStream(File.OpenRead(path), true))
|
||||
using (var archive = ArchiveFactory.Open(stream))
|
||||
{
|
||||
Assert.True(archive.IsSolid);
|
||||
@@ -46,6 +47,7 @@ namespace SharpCompress.Test
|
||||
Overwrite = true
|
||||
});
|
||||
}
|
||||
stream.ThrowOnDispose = false;
|
||||
}
|
||||
VerifyFiles();
|
||||
}
|
||||
@@ -67,7 +69,7 @@ namespace SharpCompress.Test
|
||||
foreach (var path in testArchives)
|
||||
{
|
||||
ResetScratch();
|
||||
using (Stream stream = File.OpenRead(path))
|
||||
using (var stream = new NonDisposingStream(File.OpenRead(path)))
|
||||
using (var archive = ArchiveFactory.Open(stream, readerOptions))
|
||||
{
|
||||
foreach (var entry in archive.Entries.Where(entry => !entry.IsDirectory))
|
||||
@@ -78,6 +80,7 @@ namespace SharpCompress.Test
|
||||
Overwrite = true
|
||||
});
|
||||
}
|
||||
stream.ThrowOnDispose = false;
|
||||
}
|
||||
VerifyFiles();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user