C# — Как читать и писать двоичный файл?
-
11-09-2019 - |
Вопрос
Как мне прочитать необработанный массив байтов из любого файла и записать этот массив байтов обратно в новый файл?
Решение
(редактировать:обратите внимание, что вопрос изменился;там не упоминалось byte[]
изначально;видеть редакция 1)
Хорошо, File.Copy
приходит на ум;но в остальном это звучит как Stream
сценарий:
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);
}
}
Другие советы
byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);
Ты знаешь о TextReader и TextWriter, и их потомки StreamReader и StreamWriter?Я думаю, что это решит вашу проблему, потому что они обрабатывают кодировки, BinaryReader не знает ни о кодировках, ни даже о тексте, он касается только байтов.
Добавление актуального ответа,
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest);
}
}
вы можете дополнительно указать размер буфера
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest, 2048); // or something bigger.
}
}
или вы можете выполнить операцию в другом потоке,
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
await source.CopyToAsync(dest);
}
}
что было бы полезно, когда основной поток должен выполнять другую работу, например, с приложениями WPF и Магазина Windows.