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?
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:
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 ;-)
Il existe une méthode statique System.IO.File.WriteAllBytes
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);
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);
Oui, pourquoi pas?
fs.Write(myByteArray, 0, myByteArray.Length);
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;
}