web-dev-qa-db-fra.com

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

J'essaie d'écrire un tableau Byte[] représentant un fichier complet dans un fichier.

Le fichier d'origine du client est envoyé via TCP, puis reçu par un serveur. Le flux reçu est lu dans un tableau d'octets, puis envoyé pour traitement par cette classe. 

Cela permet principalement de s'assurer que la TCPClient de réception est prête pour le flux suivant et de séparer le destinataire du traitement. 

La classe FileStream ne prend pas un tableau d'octets en tant qu'argument ou autre objet Stream (ce qui vous permet d'écrire des octets dans celui-ci).

Je vise à obtenir le traitement effectué par un thread différent de l'original (celui avec le TCPClient). 

Je ne sais pas comment mettre cela en œuvre, que dois-je essayer?

306
Roberto Bonini

Basé sur la première phrase de la question: "J'essaie d'écrire un tableau Byte [] représentant un fichier complet dans un fichier. "

Le chemin de moindre résistance serait:

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

Documenté ici:

System.IO.File.WriteAllBytes - MSDN

683
Kev

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: Oups, j'ai oublié la partie finally ... disons que c'est laissé comme un exercice pour le lecteur ;-)

39
Treb

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

19
Andrew Rollings

Vous pouvez le faire en utilisant System.IO.BinaryWriter qui prend un flux afin:

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

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

Si votre nom de tableau est "myArray", le code le serait.

myStream.Write(myArray, 0, myArray.count);
8
Mitchel Sellers

Oui, pourquoi pas?

fs.Write(myByteArray, 0, myByteArray.Length);
5
Mehrdad Afshari

Essayez 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
PatsonLeaner