diff --git a/files-csharp/ByteArrayToFile/ByteArrayToFile/ByteArrayToFile.csproj b/files-csharp/ByteArrayToFile/ByteArrayToFile/ByteArrayToFile.csproj
index 16e62dd96d..47081a6d34 100644
--- a/files-csharp/ByteArrayToFile/ByteArrayToFile/ByteArrayToFile.csproj
+++ b/files-csharp/ByteArrayToFile/ByteArrayToFile/ByteArrayToFile.csproj
@@ -2,7 +2,7 @@
Library
- net6.0
+ net10.0
enable
enable
diff --git a/files-csharp/ByteArrayToFile/ByteArrayToFile/ByteArrayToFileConverter.cs b/files-csharp/ByteArrayToFile/ByteArrayToFile/ByteArrayToFileConverter.cs
index 0a327a81ad..3c66c5b54f 100644
--- a/files-csharp/ByteArrayToFile/ByteArrayToFile/ByteArrayToFileConverter.cs
+++ b/files-csharp/ByteArrayToFile/ByteArrayToFile/ByteArrayToFileConverter.cs
@@ -4,7 +4,7 @@ public static class ByteArrayToFileConverter
{
public static void SaveByteArrayToFileWithBinaryWriter(byte[] data, string filePath)
{
- using var writer = new BinaryWriter(File.OpenWrite(filePath));
+ using var writer = new BinaryWriter(File.Create(filePath));
writer.Write(data);
}
public static void SaveByteArrayToFileWithFileStream(byte[] data, string filePath)
@@ -15,4 +15,16 @@ public static void SaveByteArrayToFileWithFileStream(byte[] data, string filePat
public static void SaveByteArrayToFileWithStaticMethod(byte[] data, string filePath)
=> File.WriteAllBytes(filePath, data);
+
+ public static Task SaveByteArrayToFileAsync(byte[] data, string filePath, CancellationToken token = default)
+ => File.WriteAllBytesAsync(filePath, data, token);
+
+ public static void AppendByteArrayToFile(byte[] data, string filePath)
+ => File.AppendAllBytes(filePath, data);
+
+ public static void SaveByteArrayToFileAtOffset(byte[] data, string filePath, long offset)
+ {
+ using var handle = File.OpenHandle(filePath, FileMode.OpenOrCreate, FileAccess.Write);
+ RandomAccess.Write(handle, data, offset);
+ }
}
diff --git a/files-csharp/ByteArrayToFile/ByteArrayToFileTest/ByteArrayToFileTest.csproj b/files-csharp/ByteArrayToFile/ByteArrayToFileTest/ByteArrayToFileTest.csproj
index 2a19789656..cb955cbaf9 100644
--- a/files-csharp/ByteArrayToFile/ByteArrayToFileTest/ByteArrayToFileTest.csproj
+++ b/files-csharp/ByteArrayToFile/ByteArrayToFileTest/ByteArrayToFileTest.csproj
@@ -1,17 +1,17 @@
- net6.0
+ net10.0
enable
false
-
-
-
-
+
+
+
+
diff --git a/files-csharp/ByteArrayToFile/ByteArrayToFileTest/ByteArrayToFileUnitTest.cs b/files-csharp/ByteArrayToFile/ByteArrayToFileTest/ByteArrayToFileUnitTest.cs
new file mode 100644
index 0000000000..6bf333fbcf
--- /dev/null
+++ b/files-csharp/ByteArrayToFile/ByteArrayToFileTest/ByteArrayToFileUnitTest.cs
@@ -0,0 +1,83 @@
+using ByteArrayToFile;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System.IO;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ByteArrayToFileTest
+{
+ [TestClass]
+ public class ByteArrayToFileUnitTest
+ {
+ const string Data = "Byte Array To File Test";
+ readonly byte[] _dataInBytes = Encoding.UTF8.GetBytes(Data);
+ readonly string _filePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
+
+ [TestCleanup]
+ public void DeleteFile() => File.Delete(_filePath);
+
+ [TestMethod]
+ public void GivenBinaryWriter_WhenSavingByteArray_ThenLoadCorrectData()
+ {
+ ByteArrayToFileConverter.SaveByteArrayToFileWithBinaryWriter(_dataInBytes, _filePath);
+
+ Assert.AreEqual(Data, File.ReadAllText(_filePath));
+ }
+
+ [TestMethod]
+ public void GivenBinaryWriter_WhenSavingShorterArrayOverLongerFile_ThenFileIsTruncated()
+ {
+ var longer = Encoding.UTF8.GetBytes("This is a test of the OpenWrite method");
+ var shorter = Encoding.UTF8.GetBytes("Second run");
+
+ ByteArrayToFileConverter.SaveByteArrayToFileWithBinaryWriter(longer, _filePath);
+ ByteArrayToFileConverter.SaveByteArrayToFileWithBinaryWriter(shorter, _filePath);
+
+ Assert.AreEqual(shorter.Length, new FileInfo(_filePath).Length);
+ Assert.AreEqual("Second run", File.ReadAllText(_filePath));
+ }
+
+ [TestMethod]
+ public void GivenFileStream_WhenSavingByteArray_ThenLoadCorrectData()
+ {
+ ByteArrayToFileConverter.SaveByteArrayToFileWithFileStream(_dataInBytes, _filePath);
+
+ Assert.AreEqual(Data, File.ReadAllText(_filePath));
+ }
+
+ [TestMethod]
+ public void GivenStaticFileMethod_WhenSavingByteArray_ThenLoadCorrectData()
+ {
+ ByteArrayToFileConverter.SaveByteArrayToFileWithStaticMethod(_dataInBytes, _filePath);
+
+ Assert.AreEqual(Data, File.ReadAllText(_filePath));
+ }
+
+ [TestMethod]
+ public async Task GivenWriteAllBytesAsync_WhenSavingByteArray_ThenLoadCorrectData()
+ {
+ await ByteArrayToFileConverter.SaveByteArrayToFileAsync(_dataInBytes, _filePath);
+
+ Assert.AreEqual(Data, File.ReadAllText(_filePath));
+ }
+
+ [TestMethod]
+ public void GivenAppendAllBytes_WhenAppendingByteArray_ThenBytesAreAddedAtTheEnd()
+ {
+ ByteArrayToFileConverter.SaveByteArrayToFileWithStaticMethod([1, 2, 3], _filePath);
+ ByteArrayToFileConverter.AppendByteArrayToFile([4, 5], _filePath);
+
+ CollectionAssert.AreEqual(new byte[] { 1, 2, 3, 4, 5 }, File.ReadAllBytes(_filePath));
+ }
+
+ [TestMethod]
+ public void GivenRandomAccess_WhenWritingAtOffset_ThenBytesAreReplacedInPlace()
+ {
+ File.WriteAllText(_filePath, "AAAAAAAAAA");
+
+ ByteArrayToFileConverter.SaveByteArrayToFileAtOffset(Encoding.UTF8.GetBytes("BB"), _filePath, 4);
+
+ Assert.AreEqual("AAAABBAAAA", File.ReadAllText(_filePath));
+ }
+ }
+}
diff --git a/files-csharp/ByteArrayToFile/ByteArrayToFileTest/LiveByteArrayToFileUnitTest.cs b/files-csharp/ByteArrayToFile/ByteArrayToFileTest/LiveByteArrayToFileUnitTest.cs
deleted file mode 100644
index e368821dc4..0000000000
--- a/files-csharp/ByteArrayToFile/ByteArrayToFileTest/LiveByteArrayToFileUnitTest.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using ByteArrayToFile;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using System.IO;
-using System.Text;
-
-namespace ByteArrayToFileTest
-{
- [TestClass]
- public class LiveByteArrayToFileUnitTest
- {
- const string Data = "Byte Array To File Test";
- readonly byte[] _dataInBytes = Encoding.UTF8.GetBytes(Data);
-
- [TestMethod]
- public void GivenBinaryWriter_WhenSavingByteArray_ThenLoadCorrectData()
- {
- string filePath = "./binary-writer-file.txt";
- ByteArrayToFileConverter.SaveByteArrayToFileWithBinaryWriter(_dataInBytes, filePath);
-
- Assert.AreEqual(Data, File.ReadAllText(filePath));
- }
-
- [TestMethod]
- public void GivenFileStream_WhenSavingByteArray_ThenLoadCorrectData()
- {
- string filePath = "./filestream-file.txt";
- ByteArrayToFileConverter.SaveByteArrayToFileWithFileStream(_dataInBytes, filePath);
-
- Assert.AreEqual(Data, File.ReadAllText(filePath));
- }
-
- [TestMethod]
- public void GivenStaticFileMethod_WhenSavingByteArray_ThenLoadCorrectData()
- {
- string filePath = "./static-method-file.txt";
- ByteArrayToFileConverter.SaveByteArrayToFileWithStaticMethod(_dataInBytes, filePath);
-
- Assert.AreEqual(Data, File.ReadAllText(filePath));
- }
- }
-}
\ No newline at end of file