Frage

Mein TCP Client empfängt ein Bild innerhalb eines Pakets Bild mit zlib.The Aufgabe komprimiert wird, ist das Bild zu dekomprimieren und sie auf dem Formular stellen.

Ich plane, das komprimierte Bild im aktuellen Verzeichnis zu speichern, entpacken Sie es und laden auf dem Formular die entpackte Datei.

Das erste Problem ist mit dem Speichern der Datei (komprimiert) .Die zlib kann es dekomprimiert speichern.

Der folgende Code lädt die komprimierte Datei und speichert diese nach der Dekompression.

    private void decompressFile(string inFile, string outFile)
    {
        System.IO.FileStream outFileStream = new System.IO.FileStream(outFile, System.IO.FileMode.Create);
        zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream);
        System.IO.FileStream inFileStream = new System.IO.FileStream(inFile, System.IO.FileMode.Open);          
        try
        {
            CopyStream(inFileStream, outZStream);
        }
        finally
        {
            outZStream.Close();
            outFileStream.Close();
            inFileStream.Close();
        }
    }

    public static void CopyStream(System.IO.Stream input, System.IO.Stream output)
    {
        byte[] buffer = new byte[2000];
        int len;
        while ((len = input.Read(buffer, 0, 2000)) > 0)
        {
            output.Write(buffer, 0, len);
        }
        output.Flush();
    }

Wie die byte [] Array übergeben direkt zu dieser Funktion? Ich plane, es zu speichern als komprimiert und dann mit dem Ort der komprimierten Datei die Funktion aufrufen, aber ich weiß nicht, weder wie eine Datei von einem byte [] Array speichern noch eine Möglichkeit, die byte [] Array übergeben wie die Eingabedatei.

Jede Hilfe wird sehr geschätzt werden.

Danke.

War es hilfreich?

Lösung

Mit dem static void System.IO.File.WriteAllBytes (string Pfad, byte [] bytes) Methode.

byte[] buffer = new byte[200];
File.WriteAllBytes(@"c:\data.dmp", buffer);

Andere Tipps

public static void SaveFile(this Byte[] fileBytes, string fileName)
{
    FileStream fileStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
    fileStream.Write(fileBytes, 0, fileBytes.Length);
    fileStream.Close();
}

Zusätzlich zu dem, was alle anderen schon gesagt hat, würde ich auch empfehlen Ihnen, ‚mit‘ Klauseln, da alle diese Objekte IDisposable implementieren.

using(FileStream outFileStream = new ...)
using(ZOutputStream outZStream = new ...)
using(FileStream inFileStream = new ...)
{
    CopyStream(inFileStream, outZStream);
}

Halten Sie die Byte-Array, das Sie in einen MemoryStream empfangen und komprimieren / dekomprimieren es on the fly ohne temporäre Dateien.

Sie können diesen Code versuchen

 private void t1()
    {
        FileStream f1 = new FileStream("C:\\myfile1.txt", FileMode.Open);
        int length = Convert.ToInt16(f1.Length);
        Byte[] b1 = new Byte[length];
        f1.Read(b1, 0, length);
        File.WriteAllBytes("C:\\myfile.txt",b1);
        f1.Dispose();
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top