example - escribir array de bytes en fichero c#
¿Se puede escribir una matriz de bytes[] en un archivo en C#? (8)
Basado en la primera oración de la pregunta: "Estoy tratando de escribir una matriz de Byte [] que representa un archivo completo en un archivo".
El camino de menor resistencia sería:
File.WriteAllBytes(string path, byte[] bytes)
Documentado aquí:
Estoy tratando de escribir una matriz Byte[]
representa un archivo completo en un archivo.
El archivo original del cliente se envía a través de TCP y luego lo recibe un servidor. La secuencia recibida se lee en una matriz de bytes y luego se envía para ser procesada por esta clase.
Esto se debe principalmente a garantizar que el TCPClient
receptor esté listo para la siguiente transmisión y separar el extremo receptor del final del procesamiento.
La clase FileStream
no toma una matriz de bytes como un argumento u otro objeto Stream (lo que le permite escribir bytes en ella).
Mi objetivo es que el procesamiento se realice mediante un subproceso diferente del original (el que tiene el TCPClient).
No sé cómo implementar esto, ¿qué debo intentar?
Hay un método estático System.IO.File.WriteAllBytes
Prueba BinaryReader:
/// <summary>
/// Convert the Binary AnyFile to Byte[] format
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
public static byte[] ConvertANYFileToBytes(HttpPostedFileBase image)
{
byte[] imageBytes = null;
BinaryReader reader = new BinaryReader(image.InputStream);
imageBytes = reader.ReadBytes((int)image.ContentLength);
return imageBytes;
}
Puede usar el método FileStream.Write (byte [] array, int offset, int count) para escribirlo.
Si el nombre de su matriz es "myArray", el código sería.
myStream.Write(myArray, 0, myArray.count);
Puede utilizar un objeto BinaryWriter
.
protected bool SaveData(string FileName, byte[] Data)
{
BinaryWriter Writer = null;
string Name = @"C:/temp/yourfile.name";
try
{
// Create a new stream to write to the file
Writer = new BinaryWriter(File.OpenWrite(Name));
// Writer raw data
Writer.Write(Data);
Writer.Flush();
Writer.Close();
}
catch
{
//...
return false;
}
return true;
}
Edición: Vaya, olvidé la parte final ... digamos que queda como un ejercicio para el lector ;-)
Puedes hacer esto usando System.IO.BinaryWriter
que toma un Stream así que:
var bw = new BinaryWriter(File.Open("path",FileMode.OpenOrCreate);
bw.Write(byteArray);
Sí, ¿por qué no?
fs.Write(myByteArray, 0, myByteArray.Length);
public ActionResult Document(int id)
{
var obj = new CEATLMSEntities().LeaveDocuments.Where(c => c.Id == id).FirstOrDefault();
string[] stringParts = obj.FName.Split(new char[] { ''.'' });
string strType = stringParts[1];
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("content-disposition", "attachment; filename=" + obj.FName);
var asciiCode = System.Text.Encoding.ASCII.GetString(obj.Document);
var datas = Convert.FromBase64String(asciiCode.Substring(asciiCode.IndexOf('','') + 1));
//Set the content type as file extension type
Response.ContentType = strType;
//Write the file content
this.Response.BinaryWrite(datas);
this.Response.End();
return new FileStreamResult(Response.OutputStream, obj.FType);
}