Oltre alle classi esterne come SharpZipLib, dalla versione 2.0 del .NET Framework è disponibile una classe apposita per la compressione degli stream.
Vediamo un esempio semplice per comprimere un file:
string SourceFile = "C:\\file.txt"; string DestinationFile = "C:\\file.gzip"; using (FileStream streamWriter = new FileStream(DestinationFile, FileMode.Create, FileAccess.Write, FileShare.None)) { using (FileStream streamReader = new FileStream(SourceFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { using (GZipStream gzip = new GZipStream(streamWriter, CompressionMode.Compress, true)) { byte[] buffer = new byte[streamReader.Length]; streamReader.Read(buffer, 0, buffer.Length); gzip.Write(buffer, 0, buffer.Length); } } }
E per la decompressione:
string SourceFile = "C:\\file.gzip"; string DestinationFile = "C:\\file.txt"; using (FileStream streamReader = new FileStream(SourceFile, FileMode.Open, FileAccess.Read, FileShare.Read)) { using (FileStream streamWriter = new FileStream(DestinationFile, FileMode.Create, FileAccess.Write, FileShare.None)) { using (GZipStream gzip = new GZipStream(streamReader, CompressionMode.Decompress, true)) { const int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; while (true) { int count = gzip.Read(buffer, 0, bufferSize); if (count != 0) streamWriter.Write(buffer, 0, count); else break; } } } }
Questa tecnica è applicabile a qualsiasi tipo di Stream, dunque si può sfruttare anche in HttpModule per comprimere al volo, in determinati casi e senza utilizzare le funzionalità native di IIS, il contenuto servito da una pagina.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.