1using Microsoft.Win32.SafeHandles;
6internal sealed class FileImageDataSource : IImageDataSource
9 private readonly SafeFileHandle _handle;
13 public FileImageDataSource(
string path)
15 _handle = File.OpenHandle(
20 FileOptions.Asynchronous | FileOptions.RandomAccess);
21 Length = RandomAccess.GetLength(_handle);
25 public long Length {
get; }
28 public int Read(
long offset, Span<byte> destination) => RandomAccess.Read(_handle, destination, offset);
31 public ValueTask<int> ReadAsync(
long offset, Memory<byte> destination, CancellationToken cancellationToken) =>
32 RandomAccess.ReadAsync(_handle, destination, offset, cancellationToken);
35 public void Dispose() => _handle.Dispose();
38 public ValueTask DisposeAsync()
41 return ValueTask.CompletedTask;