C# - How do I read and write a binary file?
-
11-09-2019 - |
Question
How do I read a raw byte array from any file, and write that byte array back into a new file?
Solution
(edit: note that the question changed; it didn't mention byte[]
initially; see revision 1)
Well, File.Copy
leaps to mind; but otherwise this sounds like a Stream
scenario:
using (Stream source = File.OpenRead(inPath))
using (Stream dest = File.Create(outPath)) {
byte[] buffer = new byte[2048]; // pick size
int bytesRead;
while((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0) {
dest.Write(buffer, 0, bytesRead);
}
}
OTHER TIPS
byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);
Do you know about TextReader and TextWriter, and their descendents StreamReader and StreamWriter? I think these will solve your problem because they handle encodings, BinaryReader does not know about encodings or even text, it is only concerned with bytes.
Adding an up to date answer,
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest);
}
}
you can optionally specify the buffer size
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest, 2048); // or something bigger.
}
}
or you could perform the operation on another thread,
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
await source.CopyToAsync(dest);
}
}
which would be useful when the main thread has to do other work, like with WPF and Windows Store apps.