Anúncios

GZipStream – Compress/Decompress

O .NET Framework fornece recursos para compressão e descompressão de arquivos.

Dentre estes recursos temos a classe GZipStream, responsável encapsular manipulações em arquivos no formato gzip. O formato gzip é bastante popular e pode ser encontrado em muitas ferramentas de compressão.

th

A classe apresentada a seguir contém dois métodos, sendo um destes métodos próprio para a compressão de arquivos, enquanto que o outro método é responsável pela descompressão de arquivos.

public class FileCompressor {

    public void Decompress(string filePath) {

        string destinyFile = string.Empty;
        destinyFile = filePath.Substring(0, filePath.Length - 3);

        if (File.Exists(destinyFile))
            File.Delete(destinyFile);

        using (FileStream sourceFile = File.OpenRead(filePath)) {

            using (FileStream destinationFile = File.Create(destinyFile)) {

                using (GZipStream unzip = new GZipStream(sourceFile, CompressionMode.Decompress, false)) {

                    int numberOfBytes = 0;
                    do {

                        byte[] buffer = new byte[4096];
                        numberOfBytes = unzip.Read(buffer, 0, buffer.Length);

                        if (numberOfBytes == 0)
                            break;

                        destinationFile.Write(buffer, 0, numberOfBytes);

                    } while (true);
                }
            }
        }
    }
        
    public string Compress(string filePath) {

        string destinyFile = filePath + ".gz";

        using (FileStream sourceFile = File.OpenRead(filePath)) {

            using (FileStream destinationFile = File.Create(destinyFile)) {

                byte[] buffer = new byte[sourceFile.Length];
                sourceFile.Read(buffer, 0, buffer.Length);

                using (GZipStream zip = new GZipStream(destinationFile, CompressionMode.Compress)) {

                    zip.Write(buffer, 0, buffer.Length);
                }
            }
        }

        return destinyFile;
    }
}

FH

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: