From c440fdf88df30b4dc649b9e637f559654edfa7a9 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 30 Mar 2016 20:18:46 +0100 Subject: [PATCH] Give writers leaveOpen option --- SharpCompress.Test/WriterTests.cs | 14 +++++++++++--- SharpCompress/Writer/GZip/GZipWriter.cs | 5 ++--- SharpCompress/Writer/Tar/TarWriter.cs | 6 +++--- SharpCompress/Writer/WriterFactory.cs | 12 ++++++------ SharpCompress/Writer/Zip/ZipWriter.cs | 4 ++-- 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/SharpCompress.Test/WriterTests.cs b/SharpCompress.Test/WriterTests.cs index 5efd9dc4..9fd01eb8 100644 --- a/SharpCompress.Test/WriterTests.cs +++ b/SharpCompress.Test/WriterTests.cs @@ -1,5 +1,7 @@ -using System.IO; +using System; +using System.IO; using SharpCompress.Common; +using SharpCompress.IO; using SharpCompress.Reader; using SharpCompress.Writer; @@ -18,9 +20,15 @@ namespace SharpCompress.Test { ResetScratch(); using (Stream stream = File.OpenWrite(Path.Combine(SCRATCH2_FILES_PATH, archive))) - using (var writer = WriterFactory.Open(stream, type, compressionType)) { - writer.WriteAll(ORIGINAL_FILES_PATH, "*", SearchOption.AllDirectories); + using (var writer = WriterFactory.Open(stream, type, compressionType, true)) + { + writer.WriteAll(ORIGINAL_FILES_PATH, "*", SearchOption.AllDirectories); + } + if (!stream.CanWrite) + { + throw new InvalidOperationException(); + } } CompareArchivesByPath(Path.Combine(SCRATCH2_FILES_PATH, archive), Path.Combine(TEST_ARCHIVES_PATH, archiveToVerifyAgainst)); diff --git a/SharpCompress/Writer/GZip/GZipWriter.cs b/SharpCompress/Writer/GZip/GZipWriter.cs index a718aad1..3539db32 100644 --- a/SharpCompress/Writer/GZip/GZipWriter.cs +++ b/SharpCompress/Writer/GZip/GZipWriter.cs @@ -1,7 +1,6 @@ using System; using System.IO; using SharpCompress.Common; -using SharpCompress.Common.Tar.Headers; using SharpCompress.Compressor; using SharpCompress.Compressor.Deflate; @@ -11,10 +10,10 @@ namespace SharpCompress.Writer.GZip { private bool wroteToStream; - public GZipWriter(Stream destination) + public GZipWriter(Stream destination, bool leaveOpen = false) : base(ArchiveType.GZip) { - InitalizeStream(new GZipStream(destination, CompressionMode.Compress, true), true); + InitalizeStream(new GZipStream(destination, CompressionMode.Compress, leaveOpen), !leaveOpen); } protected override void Dispose(bool isDisposing) diff --git a/SharpCompress/Writer/Tar/TarWriter.cs b/SharpCompress/Writer/Tar/TarWriter.cs index 5c947cc9..dd907c27 100644 --- a/SharpCompress/Writer/Tar/TarWriter.cs +++ b/SharpCompress/Writer/Tar/TarWriter.cs @@ -10,7 +10,7 @@ namespace SharpCompress.Writer.Tar { public class TarWriter : AbstractWriter { - public TarWriter(Stream destination, CompressionInfo compressionInfo) + public TarWriter(Stream destination, CompressionInfo compressionInfo, bool leaveOpen = false) : base(ArchiveType.Tar) { if (!destination.CanWrite) @@ -23,12 +23,12 @@ namespace SharpCompress.Writer.Tar break; case CompressionType.BZip2: { - destination = new BZip2Stream(destination, CompressionMode.Compress, false); + destination = new BZip2Stream(destination, CompressionMode.Compress, leaveOpen); } break; case CompressionType.GZip: { - destination = new GZipStream(destination, CompressionMode.Compress, false); + destination = new GZipStream(destination, CompressionMode.Compress, leaveOpen); } break; default: diff --git a/SharpCompress/Writer/WriterFactory.cs b/SharpCompress/Writer/WriterFactory.cs index 7a17ec1c..e33dede8 100644 --- a/SharpCompress/Writer/WriterFactory.cs +++ b/SharpCompress/Writer/WriterFactory.cs @@ -9,15 +9,15 @@ namespace SharpCompress.Writer { public static class WriterFactory { - public static IWriter Open(Stream stream, ArchiveType archiveType, CompressionType compressionType) + public static IWriter Open(Stream stream, ArchiveType archiveType, CompressionType compressionType, bool leaveOpen = false) { return Open(stream, archiveType, new CompressionInfo { Type = compressionType - }); + }, leaveOpen); } - public static IWriter Open(Stream stream, ArchiveType archiveType, CompressionInfo compressionInfo) + public static IWriter Open(Stream stream, ArchiveType archiveType, CompressionInfo compressionInfo, bool leaveOpen = false) { switch (archiveType) { @@ -27,15 +27,15 @@ namespace SharpCompress.Writer { throw new InvalidFormatException("GZip archives only support GZip compression type."); } - return new GZipWriter(stream); + return new GZipWriter(stream, leaveOpen); } case ArchiveType.Zip: { - return new ZipWriter(stream, compressionInfo, null); + return new ZipWriter(stream, compressionInfo, null, leaveOpen); } case ArchiveType.Tar: { - return new TarWriter(stream, compressionInfo); + return new TarWriter(stream, compressionInfo, leaveOpen); } default: { diff --git a/SharpCompress/Writer/Zip/ZipWriter.cs b/SharpCompress/Writer/Zip/ZipWriter.cs index 1b4c929f..4b8aedf9 100644 --- a/SharpCompress/Writer/Zip/ZipWriter.cs +++ b/SharpCompress/Writer/Zip/ZipWriter.cs @@ -24,13 +24,13 @@ namespace SharpCompress.Writer.Zip private readonly string zipComment; private long streamPosition; - public ZipWriter(Stream destination, CompressionInfo compressionInfo, string zipComment) + public ZipWriter(Stream destination, CompressionInfo compressionInfo, string zipComment, bool leaveOpen = false) : base(ArchiveType.Zip) { this.zipComment = zipComment ?? string.Empty; this.zipCompressionInfo = new ZipCompressionInfo(compressionInfo); - InitalizeStream(destination, false); + InitalizeStream(destination, !leaveOpen); } protected override void Dispose(bool isDisposing)