diff --git a/src/libraries/System.IO.FileSystem/tests/FileStream/FileStreamConformanceTests.cs b/src/libraries/System.IO.FileSystem/tests/FileStream/FileStreamConformanceTests.cs index 82b10a882c3d38..52823de458d882 100644 --- a/src/libraries/System.IO.FileSystem/tests/FileStream/FileStreamConformanceTests.cs +++ b/src/libraries/System.IO.FileSystem/tests/FileStream/FileStreamConformanceTests.cs @@ -161,6 +161,31 @@ public async Task LengthIsNotCachedAfterHandleHasBeenExposed(FileAccess fileAcce Assert.Equal(2, stream.Length); Assert.Equal(2, createdFromHandle.Length); } + + [Fact] + public async Task WriteByteFlushesTheBufferWhenItBecomesFull() + { + string filePath; + List writtenBytes = new List(); + + using (FileStream stream = (FileStream)await CreateWriteOnlyStreamCore(Array.Empty())) + { + filePath = stream.Name; + + stream.WriteByte(0); + writtenBytes.Add(0); + + byte[] bytes = new byte[BufferSize - 1]; + stream.Write(bytes.AsSpan()); + writtenBytes.AddRange(bytes); + + stream.WriteByte(1); + writtenBytes.Add(1); + } + + byte[] allBytes = File.ReadAllBytes(filePath); + Assert.Equal(writtenBytes.ToArray(), allBytes); + } } public class UnbufferedSyncFileStreamStandaloneConformanceTests : FileStreamStandaloneConformanceTests diff --git a/src/libraries/System.Private.CoreLib/src/System/IO/Strategies/BufferedFileStreamStrategy.cs b/src/libraries/System.Private.CoreLib/src/System/IO/Strategies/BufferedFileStreamStrategy.cs index 2b914e7bc0aec1..96094cf01e7aa3 100644 --- a/src/libraries/System.Private.CoreLib/src/System/IO/Strategies/BufferedFileStreamStrategy.cs +++ b/src/libraries/System.Private.CoreLib/src/System/IO/Strategies/BufferedFileStreamStrategy.cs @@ -602,7 +602,7 @@ private void WriteByteSlow(byte value) ClearReadBufferBeforeWrite(); EnsureBufferAllocated(); } - else if (_writePos == _bufferSize - 1) + else { FlushWrite(); }