Je reçois une exception lorsque vous essayez de décompresser un fichier (.gz) à l'aide de la classe Gzipstream incluse dans le document .NET. J'utilise la documentation MSDN. C'est l'exception:
L'écriture sur le flux de compression n'est pas prise en charge. P> BlockQuote>
Voici la source d'application: P>
try { var infile = new FileStream(@"C:\TarDecomp\TarDecomp\TarDecomp\bin\Debug\nick_blah-2008.tar.gz", FileMode.Open, FileAccess.Read, FileShare.Read); byte[] buffer = new byte[infile.Length]; // Read the file to ensure it is readable. int count = infile.Read(buffer, 0, buffer.Length); if (count != buffer.Length) { infile.Close(); Console.WriteLine("Test Failed: Unable to read data from file"); return; } infile.Close(); MemoryStream ms = new MemoryStream(); // Use the newly created memory stream for the compressed data. GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress, true); Console.WriteLine("Decompression"); compressedzipStream.Write(buffer, 0, buffer.Length); //<<Throws error here // Close the stream. compressedzipStream.Close(); Console.WriteLine("Original size: {0}, Compressed size: {1}", buffer.Length, ms.Length); } catch {...}
3 Réponses :
Il vous dit que vous devriez appeler Exemple de la façon dont il aurait dû être fait (n'a pas essayé de le compiler): P> lire code> au lieu de
écrire code> car sa décompression! De plus, le flux de mémoire doit être construit avec les données, ou plutôt que vous devriez passer le flux de fichiers directement au constructeur Gzipstream.
Comment les flux de compression fonctionnent peuvent être déroutants au début. P>
lecture prend compressé em> les données et l'écriture prend données non compressées em>. Dans l'ensemble, le flux vous garantit uniquement des données non compressées à tout moment. P>
La bonne façon de réaliser ce que vous essayez de faire, c'est lire en utilisant l'utilisation de gzipstream code>, puis écrivez à l'aide du
gzipstream code> aussi. p>
Le code de compression ne fonctionne pas comme le cryptage - vous ne pouvez pas décompresser d'un flux à un autre en écrivant les données comprimées. Vous devez fournir un flux contenant déjà les données compressées et laissez-la gzipstream code> en lecture. Quelque chose comme ceci:
copystream code> est une méthode d'utilité simple à lire à partir d'un flux et de copier toutes les données à une autre. Quelque chose comme ceci: p>