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