С# - Как читать и писать двоичный файл?

Как я могу прочитать массив байтов из любого файла и записать этот массив байтов в новый файл?

Ответ 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 не знает о кодировках или даже тексте, это касается только байтов.

Как читать текст из файла

Как написать текст в файл

Это отличное введение для ввода IO и кодировок.

Ответ 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.