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?
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:
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 ;-)
Es gibt eine statische Methode System.IO.File.WriteAllBytes
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);
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);
Ja, warum nicht?
fs.Write(myByteArray, 0, myByteArray.Length);
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;
}