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.
Approfondimenti
I più letti di oggi
- Community Night@Basta!Italia on tour 2009 - Milano
- Windows Phone 7.1 Mango: ecco i tool in beta
- Speciale Razor: il nuovo view engine di WebMatrix e ASP.NET MVC
- Disponibile l'SDK per Windows Phone 7.8
- SQL Server 2005 in beta 2
- Codifica all'avanguardia con .NET MAUI: Scopri le potenzialità di sviluppo multi-piattaforma
- Utilizzare WebAssembly con .NET, ovunque
- Gestire la configurazione di ASP.NET Core su più ambienti
- Calcolare il resto di una divisione
- Segnala questa pagina ad un amico