Как я могу прочитать массив байтов из любого файла и записать этот массив байтов в новый файл?
С# - Как читать и писать двоичный файл?
Ответ 1
(отредактируйте: обратите внимание, что вопрос изменился, вначале он не упоминал 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);
}
}
Ответ 2
byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);
Ответ 3
Знаете ли вы о TextReader и TextWriter и их потомки StreamReader и StreamWriter? Я думаю, что это решит вашу проблему, потому что они обрабатывают кодировки, BinaryReader не знает о кодировках или даже тексте, это касается только байтов.
Ответ 4
Добавление актуального ответа,
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 Store.