fichero - guardar archivo c#
¿Cuál es la forma más eficiente de guardar una matriz de bytes como un archivo en el disco en C#? (7)
En realidad, la forma más eficiente sería transmitir los datos y escribirlos a medida que los reciba. WCF es compatible con la transmisión, por lo que puede que sea algo que desearía analizar. Esto es particularmente importante si lo hace con archivos de gran tamaño, ya que es casi seguro que no desea que el contenido del archivo esté en la memoria tanto en el servidor como en el cliente.
Escenario bastante simple. Tengo un servicio web que recibe una matriz de bytes que se guardará como un tipo de archivo particular en el disco. ¿Cuál es la forma más eficiente de hacer esto en C #?
No estoy seguro de lo que quiere decir con "eficiente" en este contexto, pero usaría System.IO.File.WriteAllBytes (ruta de cadena, byte [] bytes) - Ciertamente eficiente en términos de LOC.
Tal vez las clases System.IO.BinaryWriter y BinaryReader ayudarían.
http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx
"Escribe tipos primitivos en binario en una secuencia y admite escribir cadenas en una codificación específica".
http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx
"Lee tipos de datos primitivos como valores binarios en una codificación específica".
Tuve un problema similar al descargar una matriz de 300 MB de bytes a un archivo de disco ...
Usé StreamWriter , y me tomó unos buenos 30 minutos para volcar el archivo.
Usar FilePut me llevó alrededor de 3-4 minutos, y cuando utilicé BinaryWriter , el archivo se volcó en 50-60 segundos.
Si usa BinaryWriter, tendrá un mejor rendimiento.
Y WriteAllBytes solo realiza
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
{
stream.Write(bytes, 0, bytes.Length);
}
BinaryWriter tiene un nombre engañoso, está destinado a escribir primitivas como representaciones de bytes en lugar de escribir datos binarios. Todo lo que hace su método Write (byte []) es ejecutar Write () en la secuencia que está utilizando, en este caso un FileStream.
System.IO.File.WriteAllBytes(path, data)
debería funcionar bien.
Eso sería File.WriteAllBytes()
.