web-dev-qa-db-fra.com

Enregistrer le fichier d'un octet [] en C # NET 3.5

Mon TCP Client reçoit une image dans un paquet. L'image est comprimée avec ZLIB.La tâche est de décompresser l'image et de la mettre sous la forme.

Je prévois de sauvegarder l'image compressée dans le répertoire actuel, de la décompresser et de charger le fichier décompressé sur le formulaire.

Le premier problème est livré avec enregistrer le fichier (compressé) .Le zlib peut l'enregistrer décompressé.

Le code ci-dessous charge le fichier compressé et l'enregistre après la décompression.

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

Comment transmettre le tableau des octets [] directement sur cette fonction? Je prévois de l'enregistrer comme compressé, puis appelez la fonction avec l'emplacement du fichier compressé, mais je ne sais pas non plus comment enregistrer un fichier à partir d'un tableau d'octet [] ni d'un moyen de passer le tableau des octets []. comme fichier d'entrée.

Toute aide sera grandement appréciée.

Merci.

17
Ivan Prodanov

Utilisez le système statique System.IO.FILE.WRIRITELLBYTES (chemin de chaîne, octets d'octets [] octets).

byte[] buffer = new byte[200];
File.WriteAllBytes(@"c:\data.dmp", buffer);
78
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();
}
5
Robin Day

En plus de ce que tout le monde a déjà déclaré, je vous suggère également d'utiliser des clauses "Utilisation" depuis tous ces objets implémentés Idisposables.

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

Collez le réseau d'octets que vous avez reçu dans un MemoryStream et compressez/décompressez-le à la volée sans utiliser de fichiers temporaires.

1
Anton Gogolev

Vous pouvez essayer ce code

 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();
    }
0
Anirudh Goel