C # - Как мне читать и записывать двоичный файл? - PullRequest
10 голосов
/ 20 сентября 2009

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

Ответы [ 4 ]

7 голосов
/ 20 сентября 2009

(правка: обратите внимание, что вопрос изменился; изначально не упоминалось 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);
        }
    }
5 голосов
/ 20 сентября 2009
byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);
3 голосов
/ 20 сентября 2009

Знаете ли вы о TextReader и TextWriter и их потомках StreamReader и StreamWriter ? Я думаю, что это решит вашу проблему, потому что они обрабатывают кодировки, BinaryReader не знает о кодировках или даже тексте, он касается только байтов.

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

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

Это отличное введение в ввод-вывод файла и кодировки.

0 голосов
/ 21 июня 2013

Добавление актуального ответа,

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.

...