62 lines
1.4 KiB
C#
62 lines
1.4 KiB
C#
using FileTime.Core.ContentAccess;
|
|
|
|
namespace FileTime.Providers.Local;
|
|
|
|
public class LocalContentWriter : IContentWriter
|
|
{
|
|
private readonly FileStream _writerStream;
|
|
private readonly BinaryWriter _binaryWriter;
|
|
private bool _disposed;
|
|
public int PreferredBufferSize => 1024 * 1024;
|
|
|
|
public LocalContentWriter(FileStream writerStream)
|
|
{
|
|
_writerStream = writerStream;
|
|
_binaryWriter = new BinaryWriter(_writerStream);
|
|
}
|
|
|
|
public Task WriteBytesAsync(byte[] data, int? index = null, CancellationToken cancellationToken = default)
|
|
{
|
|
if (index != null)
|
|
{
|
|
_binaryWriter.Write(data, index.Value, data.Length);
|
|
}
|
|
else
|
|
{
|
|
_binaryWriter.Write(data);
|
|
}
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Task FlushAsync(CancellationToken cancellationToken = default)
|
|
{
|
|
_binaryWriter.Flush();
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Stream AsStream() => _binaryWriter.BaseStream;
|
|
|
|
~LocalContentWriter()
|
|
{
|
|
Dispose(false);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
private void Dispose(bool disposing)
|
|
{
|
|
if (!_disposed)
|
|
{
|
|
if (disposing)
|
|
{
|
|
_writerStream.Dispose();
|
|
_binaryWriter.Dispose();
|
|
}
|
|
}
|
|
_disposed = true;
|
|
}
|
|
} |