Give writers leaveOpen option

This commit is contained in:
Adam Hathcock
2016-03-30 20:18:46 +01:00
parent 7f3f6bb135
commit c440fdf88d
5 changed files with 24 additions and 17 deletions

View File

@@ -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));

View File

@@ -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)

View File

@@ -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:

View File

@@ -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:
{

View File

@@ -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)