Pergunta

Como faço para ler um array de bytes bruto de qualquer arquivo, e escreve que array de bytes de volta em um novo arquivo?

Foi útil?

Solução

(edit: nota que a questão mudou, mas não mencionou byte[] inicialmente, ver revisão 1 )

Bem, File.Copy salta à mente; mas caso contrário, isso soa como um cenário 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);
        }
    }

Outras dicas

byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);

Você sabe sobre TextReader e < a href = "http://msdn.microsoft.com/en-us/library/system.io.textwriter.aspx" rel = "nofollow noreferrer"> TextWriter , e seus descendentes StreamReader e StreamWriter ? Eu acho que estes irão resolver o seu problema, porque eles lidam com as codificações, BinaryReader não sabe sobre codificações ou texto mesmo, ele só está preocupado com bytes.

Como ler texto de um arquivo

Como escrever texto em um arquivo

Esta é uma excelente introdução ao arquivo IO e codificações.

Adicionar um até resposta data,

using (var source = File.OpenRead(inPath))
{
    using (var dest = File.Create(outPath))
    {
        source.CopyTo(dest);
    }
}

Você pode, opcionalmente, especificar o tamanho do buffer

using (var source = File.OpenRead(inPath))
{
    using (var dest = File.Create(outPath))
    {
        source.CopyTo(dest, 2048); // or something bigger.
    }
}

ou você pode executar a operação em outro segmento,

using (var source = File.OpenRead(inPath))
{
    using (var dest = File.Create(outPath))
    {
        await source.CopyToAsync(dest);
    }
}

que seria útil quando o segmento principal tem que fazer outro trabalho, como com WPF e Windows loja de aplicativos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top