it-swarm.com.de

Kann ein Byte [] -Array in eine Datei in C # geschrieben werden?

Ich versuche, ein Byte[]-Array aus einer vollständigen Datei in eine Datei zu schreiben.

Die Originaldatei vom Client wird über TCP gesendet und dann von einem Server empfangen. Der empfangene Stream wird in ein Byte-Array gelesen und dann zur Verarbeitung durch diese Klasse gesendet. 

Dies soll hauptsächlich sicherstellen, dass der empfangende TCPClient für den nächsten Stream bereit ist und das empfangende Ende vom Verarbeitungsende trennt. 

Die FileStream-Klasse nimmt kein Byte-Array als Argument oder ein anderes Stream-Objekt an (wodurch Sie Byte in dieses schreiben können).

Ich möchte, dass die Verarbeitung von einem anderen Thread als dem Original (dem mit dem TCPClient) ausgeführt wird. 

Ich weiß nicht, wie ich das umsetzen soll, was soll ich versuchen?

306
Roberto Bonini

Basierend auf dem ersten Satz der Frage: "Ich versuche, ein Byte [] -Array zu schreiben, das eine vollständige Datei darstellt in eine Datei. "

Der Weg des geringsten Widerstands wäre:

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

Hier dokumentiert:

System.IO.File.WriteAllBytes - MSDN

683
Kev

Sie können ein BinaryWriter-Objekt verwenden.

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

Editieren: Ups, habe den finally-Teil vergessen ... sagen wir, es bleibt dem Leser als Übung übrig ;-)

39
Treb

Es gibt eine statische Methode System.IO.File.WriteAllBytes

19
Andrew Rollings

Sie können dies mit System.IO.BinaryWriter tun, der einen Stream benötigt, also:

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

Sie können die Methode FileStream.Write (byte [] - Array, int offset, int count) verwenden, um sie auszugeben.

Wenn Ihr Arrayname "myArray" lautet, lautet der Code.

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

Ja, warum nicht?

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

Versuchen Sie 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