Start using the interface to draw distinction between async and sync

This commit is contained in:
Adam Hathcock
2026-01-12 12:08:25 +00:00
parent 3fb07d129f
commit 05ebf22009
22 changed files with 103 additions and 90 deletions

View File

@@ -21,7 +21,7 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
/// </summary>
/// <param name="filePath"></param>
/// <param name="readerOptions"></param>
public static GZipArchive Open(string filePath, ReaderOptions? readerOptions = null)
public static IArchive Open(string filePath, ReaderOptions? readerOptions = null)
{
filePath.NotNullOrEmpty(nameof(filePath));
return Open(new FileInfo(filePath), readerOptions ?? new ReaderOptions());
@@ -32,7 +32,7 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
/// </summary>
/// <param name="fileInfo"></param>
/// <param name="readerOptions"></param>
public static GZipArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null)
public static IArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null)
{
fileInfo.NotNull(nameof(fileInfo));
return new GZipArchive(
@@ -49,7 +49,7 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
/// </summary>
/// <param name="fileInfos"></param>
/// <param name="readerOptions"></param>
public static GZipArchive Open(
public static IArchive Open(
IEnumerable<FileInfo> fileInfos,
ReaderOptions? readerOptions = null
)
@@ -70,7 +70,7 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
/// </summary>
/// <param name="streams"></param>
/// <param name="readerOptions"></param>
public static GZipArchive Open(IEnumerable<Stream> streams, ReaderOptions? readerOptions = null)
public static IArchive Open(IEnumerable<Stream> streams, ReaderOptions? readerOptions = null)
{
streams.NotNull(nameof(streams));
var strms = streams.ToArray();
@@ -88,7 +88,7 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
/// </summary>
/// <param name="stream"></param>
/// <param name="readerOptions"></param>
public static GZipArchive Open(Stream stream, ReaderOptions? readerOptions = null)
public static IArchive Open(Stream stream, ReaderOptions? readerOptions = null)
{
stream.NotNull(nameof(stream));
@@ -115,7 +115,7 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(stream, readerOptions));
return new((IAsyncArchive)Open(stream, readerOptions));
}
/// <summary>
@@ -131,7 +131,7 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfo, readerOptions));
return new((IAsyncArchive)Open(fileInfo, readerOptions));
}
/// <summary>
@@ -147,7 +147,7 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(streams, readerOptions));
return new((IAsyncArchive)Open(streams, readerOptions));
}
/// <summary>
@@ -163,7 +163,7 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfos, readerOptions));
return new((IAsyncArchive)Open(fileInfos, readerOptions));
}
public static GZipArchive Create() => new();
@@ -344,6 +344,6 @@ public class GZipArchive : AbstractWritableArchive<GZipArchiveEntry, GZipVolume>
{
var stream = Volumes.Single().Stream;
stream.Position = 0;
return new(GZipReader.Open(stream));
return new((IAsyncReader)GZipReader.Open(stream));
}
}

View File

@@ -82,12 +82,12 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
volume.Stream.Position = 0;
return volume.Stream;
});
return RarReader.Open(streams, ReaderOptions);
return (RarReader)RarReader.Open(streams, ReaderOptions);
}
var stream = Volumes.First().Stream;
stream.Position = 0;
return RarReader.Open(stream, ReaderOptions);
return (RarReader)RarReader.Open(stream, ReaderOptions);
}
public override bool IsSolid => Volumes.First().IsSolidArchive;
@@ -103,7 +103,7 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
/// </summary>
/// <param name="filePath"></param>
/// <param name="options"></param>
public static RarArchive Open(string filePath, ReaderOptions? options = null)
public static IArchive Open(string filePath, ReaderOptions? options = null)
{
filePath.NotNullOrEmpty(nameof(filePath));
var fileInfo = new FileInfo(filePath);
@@ -121,7 +121,7 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
/// </summary>
/// <param name="fileInfo"></param>
/// <param name="options"></param>
public static RarArchive Open(FileInfo fileInfo, ReaderOptions? options = null)
public static IArchive Open(FileInfo fileInfo, ReaderOptions? options = null)
{
fileInfo.NotNull(nameof(fileInfo));
return new RarArchive(
@@ -138,7 +138,7 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
/// </summary>
/// <param name="stream"></param>
/// <param name="options"></param>
public static RarArchive Open(Stream stream, ReaderOptions? options = null)
public static IArchive Open(Stream stream, ReaderOptions? options = null)
{
stream.NotNull(nameof(stream));
@@ -155,7 +155,7 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
/// </summary>
/// <param name="fileInfos"></param>
/// <param name="readerOptions"></param>
public static RarArchive Open(
public static IArchive Open(
IEnumerable<FileInfo> fileInfos,
ReaderOptions? readerOptions = null
)
@@ -176,7 +176,7 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
/// </summary>
/// <param name="streams"></param>
/// <param name="readerOptions"></param>
public static RarArchive Open(IEnumerable<Stream> streams, ReaderOptions? readerOptions = null)
public static IArchive Open(IEnumerable<Stream> streams, ReaderOptions? readerOptions = null)
{
streams.NotNull(nameof(streams));
var strms = streams.ToArray();
@@ -202,7 +202,7 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(stream, readerOptions));
return new((IAsyncArchive)Open(stream, readerOptions));
}
/// <summary>
@@ -218,7 +218,7 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfo, readerOptions));
return new((IAsyncArchive)Open(fileInfo, readerOptions));
}
/// <summary>
@@ -234,7 +234,7 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(streams, readerOptions));
return new((IAsyncArchive)Open(streams, readerOptions));
}
/// <summary>
@@ -250,7 +250,7 @@ public class RarArchive : AbstractArchive<RarArchiveEntry, RarVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfos, readerOptions));
return new((IAsyncArchive)Open(fileInfos, readerOptions));
}
public static bool IsRarFile(string filePath) => IsRarFile(new FileInfo(filePath));

View File

@@ -21,7 +21,7 @@ public class SevenZipArchive : AbstractArchive<SevenZipArchiveEntry, SevenZipVol
/// </summary>
/// <param name="filePath"></param>
/// <param name="readerOptions"></param>
public static SevenZipArchive Open(string filePath, ReaderOptions? readerOptions = null)
public static IArchive Open(string filePath, ReaderOptions? readerOptions = null)
{
filePath.NotNullOrEmpty("filePath");
return Open(new FileInfo(filePath), readerOptions ?? new ReaderOptions());
@@ -32,7 +32,7 @@ public class SevenZipArchive : AbstractArchive<SevenZipArchiveEntry, SevenZipVol
/// </summary>
/// <param name="fileInfo"></param>
/// <param name="readerOptions"></param>
public static SevenZipArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null)
public static IArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null)
{
fileInfo.NotNull("fileInfo");
return new SevenZipArchive(
@@ -49,7 +49,7 @@ public class SevenZipArchive : AbstractArchive<SevenZipArchiveEntry, SevenZipVol
/// </summary>
/// <param name="fileInfos"></param>
/// <param name="readerOptions"></param>
public static SevenZipArchive Open(
public static IArchive Open(
IEnumerable<FileInfo> fileInfos,
ReaderOptions? readerOptions = null
)
@@ -70,10 +70,7 @@ public class SevenZipArchive : AbstractArchive<SevenZipArchiveEntry, SevenZipVol
/// </summary>
/// <param name="streams"></param>
/// <param name="readerOptions"></param>
public static SevenZipArchive Open(
IEnumerable<Stream> streams,
ReaderOptions? readerOptions = null
)
public static IArchive Open(IEnumerable<Stream> streams, ReaderOptions? readerOptions = null)
{
streams.NotNull(nameof(streams));
var strms = streams.ToArray();
@@ -91,7 +88,7 @@ public class SevenZipArchive : AbstractArchive<SevenZipArchiveEntry, SevenZipVol
/// </summary>
/// <param name="stream"></param>
/// <param name="readerOptions"></param>
public static SevenZipArchive Open(Stream stream, ReaderOptions? readerOptions = null)
public static IArchive Open(Stream stream, ReaderOptions? readerOptions = null)
{
stream.NotNull("stream");
@@ -118,7 +115,7 @@ public class SevenZipArchive : AbstractArchive<SevenZipArchiveEntry, SevenZipVol
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(stream, readerOptions));
return new((IAsyncArchive)Open(stream, readerOptions));
}
/// <summary>
@@ -134,7 +131,7 @@ public class SevenZipArchive : AbstractArchive<SevenZipArchiveEntry, SevenZipVol
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfo, readerOptions));
return new((IAsyncArchive)Open(fileInfo, readerOptions));
}
/// <summary>
@@ -150,7 +147,7 @@ public class SevenZipArchive : AbstractArchive<SevenZipArchiveEntry, SevenZipVol
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(streams, readerOptions));
return new((IAsyncArchive)Open(streams, readerOptions));
}
/// <summary>
@@ -166,7 +163,7 @@ public class SevenZipArchive : AbstractArchive<SevenZipArchiveEntry, SevenZipVol
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfos, readerOptions));
return new((IAsyncArchive)Open(fileInfos, readerOptions));
}
/// <summary>

View File

@@ -22,7 +22,7 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
/// </summary>
/// <param name="filePath"></param>
/// <param name="readerOptions"></param>
public static TarArchive Open(string filePath, ReaderOptions? readerOptions = null)
public static IArchive Open(string filePath, ReaderOptions? readerOptions = null)
{
filePath.NotNullOrEmpty(nameof(filePath));
return Open(new FileInfo(filePath), readerOptions ?? new ReaderOptions());
@@ -33,7 +33,7 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
/// </summary>
/// <param name="fileInfo"></param>
/// <param name="readerOptions"></param>
public static TarArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null)
public static IArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null)
{
fileInfo.NotNull(nameof(fileInfo));
return new TarArchive(
@@ -50,7 +50,7 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
/// </summary>
/// <param name="fileInfos"></param>
/// <param name="readerOptions"></param>
public static TarArchive Open(
public static IArchive Open(
IEnumerable<FileInfo> fileInfos,
ReaderOptions? readerOptions = null
)
@@ -71,7 +71,7 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
/// </summary>
/// <param name="streams"></param>
/// <param name="readerOptions"></param>
public static TarArchive Open(IEnumerable<Stream> streams, ReaderOptions? readerOptions = null)
public static IArchive Open(IEnumerable<Stream> streams, ReaderOptions? readerOptions = null)
{
streams.NotNull(nameof(streams));
var strms = streams.ToArray();
@@ -89,7 +89,7 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
/// </summary>
/// <param name="stream"></param>
/// <param name="readerOptions"></param>
public static TarArchive Open(Stream stream, ReaderOptions? readerOptions = null)
public static IArchive Open(Stream stream, ReaderOptions? readerOptions = null)
{
stream.NotNull(nameof(stream));
@@ -116,7 +116,7 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(stream, readerOptions));
return new((IAsyncArchive)Open(stream, readerOptions));
}
/// <summary>
@@ -132,7 +132,7 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfo, readerOptions));
return new((IAsyncArchive)Open(fileInfo, readerOptions));
}
/// <summary>
@@ -148,7 +148,7 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(streams, readerOptions));
return new((IAsyncArchive)Open(streams, readerOptions));
}
/// <summary>
@@ -164,7 +164,7 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfos, readerOptions));
return new((IAsyncArchive)Open(fileInfos, readerOptions));
}
public static bool IsTarFile(string filePath) => IsTarFile(new FileInfo(filePath));
@@ -371,6 +371,6 @@ public class TarArchive : AbstractWritableArchive<TarArchiveEntry, TarVolume>
{
var stream = Volumes.Single().Stream;
stream.Position = 0;
return new(TarReader.Open(stream));
return new((IAsyncReader)TarReader.Open(stream));
}
}

View File

@@ -43,7 +43,7 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
/// </summary>
/// <param name="filePath"></param>
/// <param name="readerOptions"></param>
public static ZipArchive Open(string filePath, ReaderOptions? readerOptions = null)
public static IArchive Open(string filePath, ReaderOptions? readerOptions = null)
{
filePath.NotNullOrEmpty(nameof(filePath));
return Open(new FileInfo(filePath), readerOptions ?? new ReaderOptions());
@@ -54,7 +54,7 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
/// </summary>
/// <param name="fileInfo"></param>
/// <param name="readerOptions"></param>
public static ZipArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null)
public static IArchive Open(FileInfo fileInfo, ReaderOptions? readerOptions = null)
{
fileInfo.NotNull(nameof(fileInfo));
return new ZipArchive(
@@ -71,7 +71,7 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
/// </summary>
/// <param name="fileInfos"></param>
/// <param name="readerOptions"></param>
public static ZipArchive Open(
public static IArchive Open(
IEnumerable<FileInfo> fileInfos,
ReaderOptions? readerOptions = null
)
@@ -92,7 +92,7 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
/// </summary>
/// <param name="streams"></param>
/// <param name="readerOptions"></param>
public static ZipArchive Open(IEnumerable<Stream> streams, ReaderOptions? readerOptions = null)
public static IArchive Open(IEnumerable<Stream> streams, ReaderOptions? readerOptions = null)
{
streams.NotNull(nameof(streams));
var strms = streams.ToArray();
@@ -110,7 +110,7 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
/// </summary>
/// <param name="stream"></param>
/// <param name="readerOptions"></param>
public static ZipArchive Open(Stream stream, ReaderOptions? readerOptions = null)
public static IArchive Open(Stream stream, ReaderOptions? readerOptions = null)
{
stream.NotNull(nameof(stream));
@@ -124,6 +124,16 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
);
}
public static ValueTask<IAsyncArchive> OpenAsync(
string path,
ReaderOptions? readerOptions = null,
CancellationToken cancellationToken = default
)
{
cancellationToken.ThrowIfCancellationRequested();
return new((IAsyncArchive)Open(path, readerOptions));
}
/// <summary>
/// Opens a ZipArchive asynchronously from a stream.
/// </summary>
@@ -137,7 +147,7 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(stream, readerOptions));
return new((IAsyncArchive)Open(stream, readerOptions));
}
/// <summary>
@@ -153,7 +163,7 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfo, readerOptions));
return new((IAsyncArchive)Open(fileInfo, readerOptions));
}
/// <summary>
@@ -169,7 +179,7 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(streams, readerOptions));
return new((IAsyncArchive)Open(streams, readerOptions));
}
/// <summary>
@@ -185,7 +195,7 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(Open(fileInfos, readerOptions));
return new((IAsyncArchive)Open(fileInfos, readerOptions));
}
public static bool IsZipFile(
@@ -597,6 +607,6 @@ public class ZipArchive : AbstractWritableArchive<ZipArchiveEntry, ZipVolume>
{
var stream = Volumes.Single().Stream;
stream.Position = 0;
return new(ZipReader.Open(stream));
return new((IAsyncReader)ZipReader.Open(stream));
}
}

View File

@@ -36,7 +36,7 @@ namespace SharpCompress.Factories
Stream stream,
ReaderOptions? options,
CancellationToken cancellationToken = default
) => new(AceReader.Open(stream, options));
) => new((IAsyncReader)AceReader.Open(stream, options));
public override ValueTask<bool> IsArchiveAsync(
Stream stream,

View File

@@ -48,7 +48,7 @@ namespace SharpCompress.Factories
Stream stream,
ReaderOptions? options,
CancellationToken cancellationToken = default
) => new(ArcReader.Open(stream, options));
) => new((IAsyncReader)ArcReader.Open(stream, options));
public override ValueTask<bool> IsArchiveAsync(
Stream stream,

View File

@@ -39,7 +39,7 @@ namespace SharpCompress.Factories
Stream stream,
ReaderOptions? options,
CancellationToken cancellationToken = default
) => new(ArjReader.Open(stream, options));
) => new((IAsyncReader)ArjReader.Open(stream, options));
public override ValueTask<bool> IsArchiveAsync(
Stream stream,

View File

@@ -160,7 +160,7 @@ public class GZipFactory
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(GZipReader.Open(stream, options));
return new((IAsyncReader)GZipReader.Open(stream, options));
}
#endregion

View File

@@ -115,7 +115,7 @@ public class RarFactory : Factory, IArchiveFactory, IMultiArchiveFactory, IReade
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(RarReader.Open(stream, options));
return new((IAsyncReader)RarReader.Open(stream, options));
}
#endregion

View File

@@ -278,7 +278,7 @@ public class TarFactory
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(TarReader.Open(stream, options));
return new((IAsyncReader)TarReader.Open(stream, options));
}
#endregion

View File

@@ -202,7 +202,7 @@ public class ZipFactory
)
{
cancellationToken.ThrowIfCancellationRequested();
return new(ZipReader.Open(stream, options));
return new((IAsyncReader)ZipReader.Open(stream, options));
}
#endregion

View File

@@ -42,7 +42,7 @@ public static class AsyncEnumerableExtensions
return list;
}
public async IAsyncEnumerable<TResult> Cast<TResult>()
public async IAsyncEnumerable<TResult> CastAsync<TResult>()
where TResult : class
{
await foreach (var item in source)
@@ -51,7 +51,7 @@ public static class AsyncEnumerableExtensions
}
}
public async ValueTask<bool> All(Func<T, bool> predicate)
public async ValueTask<bool> AllAsync(Func<T, bool> predicate)
{
await foreach (var item in source)
{
@@ -64,7 +64,7 @@ public static class AsyncEnumerableExtensions
return true;
}
public async IAsyncEnumerable<T> Where(Func<T, bool> predicate)
public async IAsyncEnumerable<T> WhereAsync(Func<T, bool> predicate)
{
await foreach (var item in source)
{
@@ -75,6 +75,16 @@ public static class AsyncEnumerableExtensions
}
}
public async ValueTask<T> FirstAsync()
{
await foreach (var item in source)
{
return item; // Returns the very first item found
}
throw new InvalidOperationException("The source sequence is empty."); // Throws if the stream is empty
}
public async ValueTask<T?> FirstOrDefaultAsync()
{
await foreach (var item in source)

View File

@@ -50,7 +50,7 @@ namespace SharpCompress.Readers.Ace
/// <param name="stream">The stream containing the ACE archive.</param>
/// <param name="options">Reader options.</param>
/// <returns>An AceReader instance.</returns>
public static AceReader Open(Stream stream, ReaderOptions? options = null)
public static IReader Open(Stream stream, ReaderOptions? options = null)
{
stream.NotNull(nameof(stream));
return new SingleVolumeAceReader(stream, options ?? new ReaderOptions());
@@ -62,7 +62,7 @@ namespace SharpCompress.Readers.Ace
/// <param name="streams"></param>
/// <param name="options"></param>
/// <returns></returns>
public static AceReader Open(IEnumerable<Stream> streams, ReaderOptions? options = null)
public static IReader Open(IEnumerable<Stream> streams, ReaderOptions? options = null)
{
streams.NotNull(nameof(streams));
return new MultiVolumeAceReader(streams, options ?? new ReaderOptions());

View File

@@ -22,7 +22,7 @@ namespace SharpCompress.Readers.Arc
/// <param name="stream"></param>
/// <param name="options"></param>
/// <returns></returns>
public static ArcReader Open(Stream stream, ReaderOptions? options = null)
public static IReader Open(Stream stream, ReaderOptions? options = null)
{
stream.NotNull(nameof(stream));
return new ArcReader(stream, options ?? new ReaderOptions());

View File

@@ -27,7 +27,7 @@ namespace SharpCompress.Readers.Arj
/// <param name="stream"></param>
/// <param name="options"></param>
/// <returns></returns>
public static ArjReader Open(Stream stream, ReaderOptions? options = null)
public static IReader Open(Stream stream, ReaderOptions? options = null)
{
stream.NotNull(nameof(stream));
return new SingleVolumeArjReader(stream, options ?? new ReaderOptions());
@@ -39,7 +39,7 @@ namespace SharpCompress.Readers.Arj
/// <param name="streams"></param>
/// <param name="options"></param>
/// <returns></returns>
public static ArjReader Open(IEnumerable<Stream> streams, ReaderOptions? options = null)
public static IReader Open(IEnumerable<Stream> streams, ReaderOptions? options = null)
{
streams.NotNull(nameof(streams));
return new MultiVolumeArjReader(streams, options ?? new ReaderOptions());

View File

@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.IO;
using SharpCompress.Common;
using SharpCompress.Common.GZip;
@@ -20,7 +20,7 @@ public class GZipReader : AbstractReader<GZipEntry, GZipVolume>
/// <param name="stream"></param>
/// <param name="options"></param>
/// <returns></returns>
public static GZipReader Open(Stream stream, ReaderOptions? options = null)
public static IReader Open(Stream stream, ReaderOptions? options = null)
{
stream.NotNull(nameof(stream));
return new GZipReader(stream, options ?? new ReaderOptions());

View File

@@ -40,24 +40,24 @@ public abstract class RarReader : AbstractReader<RarReaderEntry, RarVolume>
public override RarVolume? Volume => volume;
public static RarReader Open(string filePath, ReaderOptions? options = null)
public static IReader Open(string filePath, ReaderOptions? options = null)
{
filePath.NotNullOrEmpty(nameof(filePath));
return Open(new FileInfo(filePath), options);
}
public static RarReader Open(FileInfo fileInfo, ReaderOptions? options = null)
public static IReader Open(FileInfo fileInfo, ReaderOptions? options = null)
{
options ??= new ReaderOptions { LeaveStreamOpen = false };
return Open(fileInfo.OpenRead(), options);
}
public static RarReader Open(IEnumerable<string> filePaths, ReaderOptions? options = null)
public static IReader Open(IEnumerable<string> filePaths, ReaderOptions? options = null)
{
return Open(filePaths.Select(x => new FileInfo(x)), options);
}
public static RarReader Open(IEnumerable<FileInfo> fileInfos, ReaderOptions? options = null)
public static IReader Open(IEnumerable<FileInfo> fileInfos, ReaderOptions? options = null)
{
options ??= new ReaderOptions { LeaveStreamOpen = false };
return Open(fileInfos.Select(x => x.OpenRead()), options);
@@ -69,7 +69,7 @@ public abstract class RarReader : AbstractReader<RarReaderEntry, RarVolume>
/// <param name="stream"></param>
/// <param name="options"></param>
/// <returns></returns>
public static RarReader Open(Stream stream, ReaderOptions? options = null)
public static IReader Open(Stream stream, ReaderOptions? options = null)
{
stream.NotNull(nameof(stream));
return new SingleVolumeRarReader(stream, options ?? new ReaderOptions());
@@ -81,7 +81,7 @@ public abstract class RarReader : AbstractReader<RarReaderEntry, RarVolume>
/// <param name="streams"></param>
/// <param name="options"></param>
/// <returns></returns>
public static RarReader Open(IEnumerable<Stream> streams, ReaderOptions? options = null)
public static IReader Open(IEnumerable<Stream> streams, ReaderOptions? options = null)
{
streams.NotNull(nameof(streams));
return new MultiVolumeRarReader(streams, options ?? new ReaderOptions());

View File

@@ -53,7 +53,7 @@ public class TarReader : AbstractReader<TarEntry, TarVolume>
/// <param name="stream"></param>
/// <param name="options"></param>
/// <returns></returns>
public static TarReader Open(Stream stream, ReaderOptions? options = null)
public static IReader Open(Stream stream, ReaderOptions? options = null)
{
stream.NotNull(nameof(stream));
options = options ?? new ReaderOptions();

View File

@@ -45,17 +45,13 @@ public class ZipReader : AbstractReader<ZipEntry, ZipVolume>
/// <param name="stream"></param>
/// <param name="options"></param>
/// <returns></returns>
public static ZipReader Open(Stream stream, ReaderOptions? options = null)
public static IReader Open(Stream stream, ReaderOptions? options = null)
{
stream.NotNull(nameof(stream));
return new ZipReader(stream, options ?? new ReaderOptions());
}
public static ZipReader Open(
Stream stream,
ReaderOptions? options,
IEnumerable<ZipEntry> entries
)
public static IReader Open(Stream stream, ReaderOptions? options, IEnumerable<ZipEntry> entries)
{
stream.NotNull(nameof(stream));
return new ZipReader(stream, options ?? new ReaderOptions(), entries);

View File

@@ -103,7 +103,7 @@ public class AsyncTests : TestBase
#else
await using (var stream = File.Create(outputPath))
#endif
using (var writer = WriterFactory.Open(stream, ArchiveType.Zip, CompressionType.Deflate))
await using (var writer = await WriterFactory.OpenAsync(stream, ArchiveType.Zip, CompressionType.Deflate))
{
var testFile = Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz");
@@ -117,8 +117,8 @@ public class AsyncTests : TestBase
// Verify the archive was created and contains the entry
Assert.True(File.Exists(outputPath));
await using var archive = ZipArchive.Open(outputPath);
Assert.Single(archive.Entries.Where(e => !e.IsDirectory));
await using var archive = await ZipArchive.OpenAsync(outputPath);
Assert.Single(await archive.EntriesAsync.WhereAsync(e => !e.IsDirectory).ToListAsync());
}
[Fact]

View File

@@ -47,9 +47,9 @@ public class GZipArchiveAsyncTests : ArchiveTests
#else
await using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz")))
#endif
await using (var archive = GZipArchive.Open(stream))
await using (var archive = await GZipArchive.OpenAsync(stream))
{
var entry = archive.Entries.First();
var entry = await archive.EntriesAsync.FirstAsync();
await entry.WriteToFileAsync(Path.Combine(SCRATCH_FILES_PATH, entry.Key.NotNull()));
var size = entry.Size;
@@ -74,8 +74,8 @@ public class GZipArchiveAsyncTests : ArchiveTests
#else
await using Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Tar.tar.gz"));
#endif
await using var archive = GZipArchive.Open(stream);
Assert.Throws<InvalidFormatException>(() => archive.AddEntry("jpg\\test.jpg", jpg));
await using var archive = await GZipArchive.OpenAsync(stream);
await Assert.ThrowsAsync<InvalidFormatException>(() => archive.AddEntry("jpg\\test.jpg", jpg));
await archive.SaveToAsync(Path.Combine(SCRATCH_FILES_PATH, "Tar.tar.gz"));
}