[C#] Compression Gzip, fonctionne plus
Résolu/Fermé
kelsett
Messages postés
353
Date d'inscription
dimanche 9 juillet 2006
Statut
Membre
Dernière intervention
13 octobre 2014
-
5 mai 2010 à 17:24
ARIJ.AH - 25 juin 2013 à 16:09
ARIJ.AH - 25 juin 2013 à 16:09
A voir également:
- [C#] Compression Gzip, fonctionne plus
- Logiciel de compression gratuit - Guide
- Compression pdf - Guide
- PDF COMPRESS - Télécharger - PDF
- Logiciel compression photo gratuit - Télécharger - Photo & Graphisme
- Logiciel compression mp3 - Télécharger - Visionnage & Diaporama
9 réponses
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
5 mai 2010 à 19:13
5 mai 2010 à 19:13
Poste une archive contenant ton projet/ta solution si tu veux qu'on essaye de trouver le problème éventuel que tu as ;)
Car là comme ça non moi je n'ai pas d'idées sans avoir rien vu.
Car là comme ça non moi je n'ai pas d'idées sans avoir rien vu.
kelsett
Messages postés
353
Date d'inscription
dimanche 9 juillet 2006
Statut
Membre
Dernière intervention
13 octobre 2014
62
5 mai 2010 à 19:20
5 mai 2010 à 19:20
Bon en fait après recherches j'en suis arrivé à la conclusion que c'est mon code de compression qui marche pas.
J'explique:
J'ai d'abord eu l'idée de voir si j'arrivais à ouvrir avec un décompresseur tel que WinZip ou 7Zip. J'ai lancé le fichier, et ca a fonctionné parfaitement, ce qui montre donc que ce n'est pas un problème de corruption.
Seulement voilà après j'ai voulu voir si c'était pas dans le code qu'il y avait un soucis, j'ai rien changé et en recompilant mon compresseur, je tente de compresser un fichier, qui quand j'essaie de l'ouvrir ne montre plus une invite de commande pendant une demi seconde, mais un message d'erreur:
Le résultat est le même, mais j'en conclus donc que c'est le code de compression qui foire là. Voici mon code:
J'explique:
J'ai d'abord eu l'idée de voir si j'arrivais à ouvrir avec un décompresseur tel que WinZip ou 7Zip. J'ai lancé le fichier, et ca a fonctionné parfaitement, ce qui montre donc que ce n'est pas un problème de corruption.
Seulement voilà après j'ai voulu voir si c'était pas dans le code qu'il y avait un soucis, j'ai rien changé et en recompilant mon compresseur, je tente de compresser un fichier, qui quand j'essaie de l'ouvrir ne montre plus une invite de commande pendant une demi seconde, mais un message d'erreur:
"C:\........ fichier.exe" Le paramètre est incorrect.
Le résultat est le même, mais j'en conclus donc que c'est le code de compression qui foire là. Voici mon code:
byte[] OBuffer = new byte[OFileStream.Length]; // Read whole FileStream OFileStream.Read(OBuffer, 0, System.Convert.ToInt32(OFileStream.Length)); // Close FileStream OFileStream.Close(); // Create the file new file OFileStream = new FileStream(fileTextbox.Text, FileMode.Create); // Compress data GZipStream OGZipStream = new GZipStream(OFileStream, CompressionMode.Compress, false); // Write the compressed data in the file OGZipStream.Write(OBuffer, 0, OBuffer.Length); // Close GZipStream OGZipStream.Close();
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
5 mai 2010 à 20:03
5 mai 2010 à 20:03
Pourquoi utiliser ne pas utiliser de FileStream qui sont bien plus simple qu'un tableau de byte pour lire ton fichier, voici un exemple qui tourne niquel chez moi :
Essaye de comparer avec ton code pour voir ce qui ne fonctionne pas dans le tiens car là je n'ai pas tester le tiens ni même comparer avec le snippet que j'ai chopé sur un autre site (manque de temps déso).
using System; using System.IO; using System.IO.Compression; namespace zip { public class Program { public static void Main() { // Path to directory of files to compress and decompress. string dirpath = @"c:\users\public\reports"; DirectoryInfo di = new DirectoryInfo(dirpath); // Compress the directory's files. foreach (FileInfo fi in di.GetFiles()) { Compress(fi); } // Decompress all *.gz files in the directory. foreach (FileInfo fi in di.GetFiles("*.gz")) { Decompress(fi); } } public static void Compress(FileInfo fi) { // Get the stream of the source file. using (FileStream inFile = fi.OpenRead()) { // Prevent compressing hidden and // already compressed files. if ((File.GetAttributes(fi.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fi.Extension != ".gz") { // Create the compressed file. using (FileStream outFile = File.Create(fi.FullName + ".gz")) { using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress)) { // Copy the source file into // the compression stream. inFile.CopyTo(Compress); Console.WriteLine("Compressed {0} from {1} to {2} bytes.", fi.Name, fi.Length.ToString(), outFile.Length.ToString()); } } } } } public static void Decompress(FileInfo fi) { // Get the stream of the source file. using (FileStream inFile = fi.OpenRead()) { // Get original file extension, for example // "doc" from report.doc.gz. string curFile = fi.FullName; string origName = curFile.Remove(curFile.Length - fi.Extension.Length); //Create the decompressed file. using (FileStream outFile = File.Create(origName)) { using (GZipStream Decompress = new GZipStream(inFile, CompressionMode.Decompress)) { // Copy the decompression stream // into the output file. Decompress.CopyTo(outFile); Console.WriteLine("Decompressed: {0}", fi.Name); } } } } } }
Essaye de comparer avec ton code pour voir ce qui ne fonctionne pas dans le tiens car là je n'ai pas tester le tiens ni même comparer avec le snippet que j'ai chopé sur un autre site (manque de temps déso).
kelsett
Messages postés
353
Date d'inscription
dimanche 9 juillet 2006
Statut
Membre
Dernière intervention
13 octobre 2014
62
5 mai 2010 à 20:42
5 mai 2010 à 20:42
J'ai déjà essayé, je trouvais aucune erreur dans mon code donc la meilleure idée que j'ai eu c'est de tester des bouts de code que je trouve sur internet, j'ai du tester 3-4 fonctions différentes (dont celle là) et j'obtiens toujours la même erreur :/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
5 mai 2010 à 21:51
5 mai 2010 à 21:51
Je vais tester chez moi le bout de code que je t'ai donné, en targetant les différents frameworks (2.0, 3.0, 3.5, 4.0) et te tiendrais au courant.
kelsett
Messages postés
353
Date d'inscription
dimanche 9 juillet 2006
Statut
Membre
Dernière intervention
13 octobre 2014
62
5 mai 2010 à 21:56
5 mai 2010 à 21:56
Ok merci beaucoup :)
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
6 mai 2010 à 01:46
6 mai 2010 à 01:46
Chez moi ça fonctionne niquel avec le Framework 4.0.
Par contre pour les précédents (3.5, 3.0 et 2.0), il semble qu'il n'y ait pas de méthode CopyTo pour les Stream donc il faut écrire soit même le flux dans le fichier mais ça fonctionne bien aussi.
Peux-être glisses-tu une erreur lors de l'écriture de ton flux ou dans les paramètres de la méthode Write du GZipStream ?
Par contre pour les précédents (3.5, 3.0 et 2.0), il semble qu'il n'y ait pas de méthode CopyTo pour les Stream donc il faut écrire soit même le flux dans le fichier mais ça fonctionne bien aussi.
Peux-être glisses-tu une erreur lors de l'écriture de ton flux ou dans les paramètres de la méthode Write du GZipStream ?
kelsett
Messages postés
353
Date d'inscription
dimanche 9 juillet 2006
Statut
Membre
Dernière intervention
13 octobre 2014
62
6 mai 2010 à 22:11
6 mai 2010 à 22:11
Ouais... J'ai réinstallé le Framework 4.0, j'ai de nouveau la fenêtre noire :/
Bon visiblement c'est un problème de mon coté uniquement donc, ce qui est déjà une très bonne nouvelles puisque ca fonctionnera chez les utilisateurs de mon appli.
Qu'est ce que tu entends par "glisser une erreur" ? Si le fichier était corrompu, il ne pourrait pas être ouvert avec 7zip...
Bon visiblement c'est un problème de mon coté uniquement donc, ce qui est déjà une très bonne nouvelles puisque ca fonctionnera chez les utilisateurs de mon appli.
Qu'est ce que tu entends par "glisser une erreur" ? Si le fichier était corrompu, il ne pourrait pas être ouvert avec 7zip...
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
8 mai 2010 à 11:40
8 mai 2010 à 11:40
En effet j'avais confondu avec autre chose, il faut que je lise mieux tes messages ^^
vous pouvez utiliser :
using System.IO.Compression; du framework 4.0 ou 4.5
code :
string startPath = @"C:\test";
string zipPath = @"c:\test1.zip";
string extractPath = @"c:\example\extract";
//compression
ZipFile.CreateFromDirectory(startPath, zipPath);
//extraction
ZipFile.ExtractToDirectory(zipPath, extractPath);
using System.IO.Compression; du framework 4.0 ou 4.5
code :
string startPath = @"C:\test";
string zipPath = @"c:\test1.zip";
string extractPath = @"c:\example\extract";
//compression
ZipFile.CreateFromDirectory(startPath, zipPath);
//extraction
ZipFile.ExtractToDirectory(zipPath, extractPath);