fix usages of AsyncBinaryReader

This commit is contained in:
Adam Hathcock
2026-02-04 16:07:06 +00:00
parent 17cb952772
commit fad7cf3b1d
14 changed files with 37 additions and 9 deletions

View File

@@ -176,7 +176,11 @@ public partial class TarArchive
try
{
var tarHeader = new TarHeader(new ArchiveEncoding());
var reader = new AsyncBinaryReader(stream, false);
#if NET8_0_OR_GREATER
await using var reader = new AsyncBinaryReader(stream, leaveOpen: true);
#else
using var reader = new AsyncBinaryReader(stream, leaveOpen: true);
#endif
var readSucceeded = await tarHeader.ReadAsync(reader);
var isEmptyArchive =
tarHeader.Name?.Length == 0

View File

@@ -4,6 +4,7 @@ using System.IO;
using System.Threading;
using System.Threading.Tasks;
using SharpCompress.Common;
using SharpCompress.IO;
namespace SharpCompress.Common.Rar;

View File

@@ -6,6 +6,7 @@ using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using SharpCompress.IO;
namespace SharpCompress.Common.Tar.Headers;

View File

@@ -13,12 +13,17 @@ internal static partial class TarHeaderFactory
IArchiveEncoding archiveEncoding
)
{
#if NET8_0_OR_GREATER
await using var reader = new AsyncBinaryReader(stream, leaveOpen: true);
#else
using var reader = new AsyncBinaryReader(stream, leaveOpen: true);
#endif
while (true)
{
TarHeader? header = null;
try
{
var reader = new AsyncBinaryReader(stream, false);
header = new TarHeader(archiveEncoding);
if (!await header.ReadAsync(reader))
{

View File

@@ -1,5 +1,6 @@
using System.IO;
using System.Threading.Tasks;
using SharpCompress.IO;
namespace SharpCompress.Common.Zip.Headers;

View File

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

View File

@@ -1,5 +1,6 @@
using System.IO;
using System.Threading.Tasks;
using SharpCompress.IO;
namespace SharpCompress.Common.Zip.Headers;

View File

@@ -1,6 +1,7 @@
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using SharpCompress.IO;
namespace SharpCompress.Common.Zip.Headers;

View File

@@ -1,6 +1,7 @@
using System;
using System.IO;
using System.Threading.Tasks;
using SharpCompress.IO;
namespace SharpCompress.Common.Zip.Headers;

View File

@@ -1,5 +1,6 @@
using System.IO;
using System.Threading.Tasks;
using SharpCompress.IO;
namespace SharpCompress.Common.Zip.Headers;

View File

@@ -1,5 +1,6 @@
using System.IO;
using System.Threading.Tasks;
using SharpCompress.IO;
namespace SharpCompress.Common.Zip.Headers;

View File

@@ -1,5 +1,6 @@
using System.IO;
using System.Threading.Tasks;
using SharpCompress.IO;
namespace SharpCompress.Common.Zip.Headers;

View File

@@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using SharpCompress.Common.Zip.Headers;
using SharpCompress.IO;
namespace SharpCompress.Common.Zip;
@@ -11,7 +12,11 @@ internal sealed partial class SeekableZipHeaderFactory
{
internal async IAsyncEnumerable<ZipHeader> ReadSeekableHeaderAsync(Stream stream)
{
var reader = new AsyncBinaryReader(stream);
#if NET8_0_OR_GREATER
await using var reader = new AsyncBinaryReader(stream, leaveOpen: true);
#else
using var reader = new AsyncBinaryReader(stream, leaveOpen: true);
#endif
await SeekBackToHeaderAsync(stream, reader);
@@ -127,7 +132,11 @@ internal sealed partial class SeekableZipHeaderFactory
)
{
stream.Seek(directoryEntryHeader.RelativeOffsetOfEntryHeader, SeekOrigin.Begin);
var reader = new AsyncBinaryReader(stream);
#if NET8_0_OR_GREATER
await using var reader = new AsyncBinaryReader(stream, leaveOpen: true);
#else
using var reader = new AsyncBinaryReader(stream, leaveOpen: true);
#endif
var signature = await reader.ReadUInt32Async();
if (await ReadHeader(signature, reader, _zip64) is not LocalEntryHeader localEntryHeader)
{

View File

@@ -4,9 +4,12 @@ using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace SharpCompress.Common;
namespace SharpCompress.IO;
public sealed class AsyncBinaryReader : IDisposable
#if NET8_0_OR_GREATER
, IAsyncDisposable
#endif
{
private readonly Stream _stream;
private readonly Stream _originalStream;
@@ -14,7 +17,7 @@ public sealed class AsyncBinaryReader : IDisposable
private readonly byte[] _buffer = new byte[8];
private bool _disposed;
public AsyncBinaryReader(Stream stream, bool leaveOpen = false, int bufferSize = 4096)
public AsyncBinaryReader(Stream stream, bool leaveOpen = false)
{
if (!stream.CanRead)
{
@@ -23,9 +26,6 @@ public sealed class AsyncBinaryReader : IDisposable
_originalStream = stream ?? throw new ArgumentNullException(nameof(stream));
_leaveOpen = leaveOpen;
// Use the stream directly without wrapping in BufferedStream
// BufferedStream uses synchronous Read internally which doesn't work with async-only streams
_stream = stream;
}