Un tableau Byte [] peut-il être écrit dans un fichier en C#?

j'essaie d'écrire un tableau Byte[] représentant un fichier complet à un fichier.

le fichier original du client est envoyé via TCP puis reçu par un serveur. Le flux reçu est lu à un tableau d'octets et ensuite envoyé pour être traité par cette classe.

il s'agit principalement de s'assurer que le récepteur TCPClient est prêt pour le flux suivant et de séparer l'extrémité de réception de l'extrémité de traitement.

La classe FileStream ne prend pas un tableau d'octets comme argument ou un autre objet Stream ( ce qui vous permet d'y écrire des octets).

je vise à obtenir le traitement fait par un fil différent de l'original ( celui avec le TCPClient).

Je ne sais pas comment mettre en œuvre ceci, Que dois-je essayer?

290
demandé sur George Stocker 2008-12-19 19:51:59

8 réponses

basé sur la première phrase de la question: "j'essaie d'écrire un Byte[] array représentant un fichier complet à un fichier."

Le chemin de moindre résistance serait:

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

documentée ici:

System.IO.File.WriteAllBytes - MSDN

627
répondu Kev 2013-07-17 00:17:29

vous pouvez utiliser un objet 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;
}

Edit: Oops, forget the finally part... disons qu'il est laissé comme un exercice pour le lecteur; -)

37
répondu Treb 2013-05-30 10:55:57

il existe une méthode statique System.IO.File.WriteAllBytes

18
répondu Andrew Rollings 2008-12-19 16:59:03

vous pouvez faire cela en utilisant System.IO.BinaryWriter qui prend un jet ainsi:

var bw = new BinaryWriter(File.Open("path",FileMode.OpenOrCreate);
bw.Write(byteArray);
11
répondu JoshBerke 2013-03-20 13:42:39

vous pouvez utiliser la FileStream.Write(byte[] tableau, int offset, int count) méthode de l'écrire.

si votre nom de tableau est" myArray " le code serait.

myStream.Write(myArray, 0, myArray.count);
8
répondu Mitchel Sellers 2008-12-19 17:00:59

oui, pourquoi pas?

fs.Write(myByteArray, 0, myByteArray.Length);
5
répondu Mehrdad Afshari 2008-12-19 16:57:53

Try 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;
}
0
répondu PatsonLeaner 2018-02-25 22:00:33
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);
    }
-1
répondu Purushottam 2015-07-20 09:56:56