same for writers

This commit is contained in:
Adam Hathcock
2026-01-14 09:29:44 +00:00
parent 775efa1b26
commit e63ee57ef0
8 changed files with 208 additions and 6 deletions

View File

@@ -0,0 +1,58 @@
#if NET8_0_OR_GREATER
using System.IO;
using System.Threading;
using SharpCompress.Common;
namespace SharpCompress.Writers.GZip;
public partial class GZipWriter : IWriterOpenable<GZipWriterOptions>
{
public static IWriter Open(string filePath, GZipWriterOptions writerOptions)
{
filePath.NotNullOrEmpty(nameof(filePath));
return Open(new FileInfo(filePath), writerOptions);
}
public static IWriter Open(FileInfo fileInfo, GZipWriterOptions writerOptions)
{
fileInfo.NotNull(nameof(fileInfo));
return new GZipWriter(fileInfo.OpenWrite(), writerOptions);
}
public static IWriter Open(Stream stream, GZipWriterOptions writerOptions)
{
stream.NotNull(nameof(stream));
return new GZipWriter(stream, writerOptions);
}
public static IAsyncWriter OpenAsync(
string path,
GZipWriterOptions writerOptions,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return (IAsyncWriter)Open(path, writerOptions);
}
public static IAsyncWriter OpenAsync(
Stream stream,
GZipWriterOptions writerOptions,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return (IAsyncWriter)Open(stream, writerOptions);
}
public static IAsyncWriter OpenAsync(
FileInfo fileInfo,
GZipWriterOptions writerOptions,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return (IAsyncWriter)Open(fileInfo, writerOptions);
}
}
#endif

View File

@@ -7,7 +7,7 @@ using SharpCompress.IO;
namespace SharpCompress.Writers.GZip;
public sealed class GZipWriter : AbstractWriter
public sealed partial class GZipWriter : AbstractWriter
{
private bool _wroteToStream;

View File

@@ -1,6 +1,35 @@
#if NET8_0_OR_GREATER
using System.IO;
using System.Threading;
namespace SharpCompress.Writers;
public class IWriterOpenable
public interface IWriterOpenable<TWriterOptions>
where TWriterOptions : WriterOptions
{
public static abstract IWriter Open(string filePath, TWriterOptions writerOptions);
public static abstract IWriter Open(FileInfo fileInfo, TWriterOptions writerOptions);
public static abstract IWriter Open(Stream stream, TWriterOptions writerOptions);
/// <summary>
/// Opens a Writer asynchronously.
/// </summary>
/// <param name="stream">The stream to write to.</param>
/// <param name="archiveType">The archive type.</param>
/// <param name="writerOptions">Writer options.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>A task that returns an IWriter.</returns>
public static abstract IAsyncWriter OpenAsync(
Stream stream,
TWriterOptions writerOptions,
CancellationToken cancellationToken = default
);
public static abstract IAsyncWriter OpenAsync(string filePath, TWriterOptions writerOptions,
CancellationToken cancellationToken = default);
public static abstract IAsyncWriter OpenAsync(FileInfo fileInfo, TWriterOptions writerOptions,
CancellationToken cancellationToken = default);
}
#endif

View File

@@ -0,0 +1,58 @@
#if NET8_0_OR_GREATER
using System.IO;
using System.Threading;
using SharpCompress.Common;
namespace SharpCompress.Writers.Tar;
public partial class TarWriter : IWriterOpenable<TarWriterOptions>
{
public static IWriter Open(string filePath, TarWriterOptions writerOptions)
{
filePath.NotNullOrEmpty(nameof(filePath));
return Open(new FileInfo(filePath), writerOptions);
}
public static IWriter Open(FileInfo fileInfo, TarWriterOptions writerOptions)
{
fileInfo.NotNull(nameof(fileInfo));
return new TarWriter(fileInfo.OpenWrite(), writerOptions);
}
public static IWriter Open(Stream stream, TarWriterOptions writerOptions)
{
stream.NotNull(nameof(stream));
return new TarWriter(stream, writerOptions);
}
public static IAsyncWriter OpenAsync(
string path,
TarWriterOptions writerOptions,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return (IAsyncWriter)Open(path, writerOptions);
}
public static IAsyncWriter OpenAsync(
Stream stream,
TarWriterOptions writerOptions,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return (IAsyncWriter)Open(stream, writerOptions);
}
public static IAsyncWriter OpenAsync(
FileInfo fileInfo,
TarWriterOptions writerOptions,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return (IAsyncWriter)Open(fileInfo, writerOptions);
}
}
#endif

View File

@@ -12,7 +12,7 @@ using SharpCompress.IO;
namespace SharpCompress.Writers.Tar;
public class TarWriter : AbstractWriter
public partial class TarWriter : AbstractWriter
{
private readonly bool finalizeArchiveOnClose;
private TarHeaderWriteFormat headerFormat;

View File

@@ -2,7 +2,6 @@ using System;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using SharpCompress.Common;
namespace SharpCompress.Writers;

View File

@@ -0,0 +1,58 @@
#if NET8_0_OR_GREATER
using System.IO;
using System.Threading;
using SharpCompress.Common;
namespace SharpCompress.Writers.Zip;
public partial class ZipWriter : IWriterOpenable<ZipWriterOptions>
{
public static IWriter Open(string filePath, ZipWriterOptions writerOptions)
{
filePath.NotNullOrEmpty(nameof(filePath));
return Open(new FileInfo(filePath), writerOptions);
}
public static IWriter Open(FileInfo fileInfo, ZipWriterOptions writerOptions)
{
fileInfo.NotNull(nameof(fileInfo));
return new ZipWriter(fileInfo.OpenWrite(), writerOptions);
}
public static IWriter Open(Stream stream, ZipWriterOptions writerOptions)
{
stream.NotNull(nameof(stream));
return new ZipWriter(stream, writerOptions);
}
public static IAsyncWriter OpenAsync(
string path,
ZipWriterOptions writerOptions,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return (IAsyncWriter)Open(path, writerOptions);
}
public static IAsyncWriter OpenAsync(
Stream stream,
ZipWriterOptions writerOptions,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return (IAsyncWriter)Open(stream, writerOptions);
}
public static IAsyncWriter OpenAsync(
FileInfo fileInfo,
ZipWriterOptions writerOptions,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return (IAsyncWriter)Open(fileInfo, writerOptions);
}
}
#endif

View File

@@ -18,7 +18,7 @@ using SharpCompress.IO;
namespace SharpCompress.Writers.Zip;
public class ZipWriter : AbstractWriter
public partial class ZipWriter : AbstractWriter
{
private readonly CompressionType compressionType;
private readonly int compressionLevel;