C # - ¿Cómo leer y escribir un archivo binario?
-
11-09-2019 - |
Pregunta
¿Cómo leo una matriz de bytes primaria de cualquier tipo de archivo, y escribe que la matriz de bytes de nuevo en un nuevo archivo?
Solución
(edit: tenga en cuenta que la cuestión ha cambiado, sino que no mencionó inicialmente byte[]
; ver revisión 1 )
Bueno, File.Copy
salta a la mente; pero por lo demás esto suena como un escenario 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);
}
}
Otros consejos
byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);
¿Sabe usted acerca de TextReader y < a href = "http://msdn.microsoft.com/en-us/library/system.io.textwriter.aspx" rel = "nofollow noreferrer"> TextWriter , y sus descendientes StreamReader y StreamWriter ? Creo que estos van a resolver su problema porque manejan codificaciones, BinaryReader no sabe nada de codificaciones o incluso el texto, que sólo se ocupa de bytes.
Cómo leer el texto de un archivo
saber cómo escribir texto en un archivo
Esta es una excelente introducción a presentar IO y codificaciones.
Adición de una respuesta hasta la fecha,
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest);
}
}
Opcionalmente, puede especificar el tamaño del búfer
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest, 2048); // or something bigger.
}
}
o se puede realizar la operación en otro hilo,
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
await source.CopyToAsync(dest);
}
}
que sería útil cuando el hilo principal tiene que hacer otro trabajo, al igual que con WPF y Windows para almacenar aplicaciones.