C # - Como faço para ler e gravar um arquivo binário?
-
11-09-2019 - |
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?
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 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.