¿Se puede escribir una matriz Byte en un archivo en C #?

Estoy intentando 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 a una matriz de bytes y luego se envía para ser procesada por esta clase.

Esto es principalmente para garantizar que el TCPClient receptor esté listo para la siguiente secuencia y separar el extremo receptor del extremo de procesamiento.

La clase FileStream no toma una matriz de bytes como un argumento u otro objeto Stream (que le permite escribir bytes en ella).

Mi objective es hacer que el procesamiento sea realizado por un hilo diferente del original (el del TCPClient).

No sé cómo implementar esto, ¿qué debo probar?

Según la primera oración de la pregunta: “Estoy intentando escribir una matriz Byte [] que representa un archivo completo en un archivo”.

El camino de menor resistencia sería:

 File.WriteAllBytes(string path, byte[] bytes) 

Documentado aquí:

System.IO.File.WriteAllBytes – MSDN

Puedes usar 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; } 

Editar: Vaya, olvidé la parte final … Digamos que se deja como un ejercicio para el lector 😉

Hay un método estático System.IO.File.WriteAllBytes

Puedes hacer esto usando System.IO.BinaryWriter que toma un Stream así:

 var bw = new BinaryWriter(File.Open("path",FileMode.OpenOrCreate); bw.Write(byteArray); 

Puede usar el método FileStream.Write (byte [] array, int offset, int count) para escribirlo.

Si su nombre de matriz es “myArray”, el código sería.

 myStream.Write(myArray, 0, myArray.count); 

Sí, ¿por qué no?

 fs.Write(myByteArray, 0, myByteArray.Length); 

Pruebe BinaryReader:

 ///  /// Convert the Binary AnyFile to Byte[] format ///  ///  ///  public static byte[] ConvertANYFileToBytes(HttpPostedFileBase image) { byte[] imageBytes = null; BinaryReader reader = new BinaryReader(image.InputStream); imageBytes = reader.ReadBytes((int)image.ContentLength); return imageBytes; } 
 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); }