diff --git a/src/Ramstack.FileSystem.Abstractions/VirtualFileExtensions.cs b/src/Ramstack.FileSystem.Abstractions/VirtualFileExtensions.cs
index ba52bf5..91c86cc 100644
--- a/src/Ramstack.FileSystem.Abstractions/VirtualFileExtensions.cs
+++ b/src/Ramstack.FileSystem.Abstractions/VirtualFileExtensions.cs
@@ -263,7 +263,7 @@ static void Error_EndOfStream() =>
/// A representing the asynchronous operation.
///
public static ValueTask WriteAllTextAsync(this VirtualFile file, string contents, CancellationToken cancellationToken = default) =>
- WriteAllTextAsync(file, contents.AsMemory(), Utf8NoBom, cancellationToken);
+ WriteAllTextAsync(file, contents.AsMemory(), encoding: null, cancellationToken);
///
/// Asynchronously writes the specified string to the current file. If the file already exists, it is truncated and overwritten.
@@ -302,38 +302,9 @@ public static ValueTask WriteAllTextAsync(this VirtualFile file, ReadOnlyMemory<
///
public static async ValueTask WriteAllTextAsync(this VirtualFile file, ReadOnlyMemory contents, Encoding? encoding, CancellationToken cancellationToken = default)
{
- const int ChunkSize = 8192;
-
- if (contents.IsEmpty)
- return;
-
- encoding ??= Utf8NoBom;
var stream = await file.OpenWriteAsync(cancellationToken).ConfigureAwait(false);
-
- var preamble = encoding.GetPreamble();
- if (preamble.Length != 0)
- stream.Write(preamble.AsSpan());
-
- var bytes = ArrayPool.Shared.Rent(
- encoding.GetMaxCharCount(Math.Min(ChunkSize, contents.Length)));
-
- try
- {
- var encoder = encoding.GetEncoder();
- while (contents.Length != 0)
- {
- var data = contents[..Math.Min(ChunkSize, contents.Length)];
- contents = contents[data.Length..];
-
- var encoded = encoder.GetBytes(data.Span, bytes.AsSpan(), flush: contents.IsEmpty);
- await stream.WriteAsync(bytes.AsMemory(0, encoded), cancellationToken).ConfigureAwait(false);
- }
- }
- finally
- {
- await stream.DisposeAsync().ConfigureAwait(false);
- ArrayPool.Shared.Return(bytes);
- }
+ await using var writer = new StreamWriter(stream, encoding!);
+ await writer.WriteAsync(contents, cancellationToken).ConfigureAwait(false);
}
///