none
Bilblioteca para compactar arquivos RRS feed

  • Pergunta

  • Oi pessoal,

     

    Gostaria de saber se alguem conhece alguma biblioteca ou componente para compactar arquivos ? Se sim, poderiam mostrar alguns exemplos?

     

    Obrigado.

    terça-feira, 3 de agosto de 2010 20:24

Respostas

  • Olá Oda,

     

    Existe uma bibliteca chamada SharpZipLib (http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx) que é muito útil para o problema em questão.

    Segue um exemplo de utilização da mesma:

     

    Importe a referência

    using ICSharpCode.SharpZipLib.Zip;
    

    E após

          //PROCESSO DE COMPACTAÇÃO
                ZipOutputStream zipOutPut = new ZipOutputStream(System.IO.File.Create(Server.MapPath("~/Diretorio/NomeDoArquivo.zip")));
                //Compactação nivel 9
                zipOutPut.SetLevel(9);
                zipOutPut.Finish();
                zipOutPut.Close();
     
                ZipFile zip = new ZipFile(Server.MapPath("~/Diretorio/NomeDoArquivo.zip"));
                //Inicia a criação do ZIP
                zip.BeginUpdate();
     
     
                DirectoryInfo DirInfo = new DirectoryInfo(Server.MapPath("~/DiretorioDestino/"));
                FileInfo[] AllFiles = DirInfo.GetFiles();
                foreach (FileInfo FileTxt in AllFiles)
                {
                    //Adicionando arquivos previamente criados ao zipFile
                    string nomeZIP = Server.MapPath("~/DiretorioDestino/" + FileTxt.Name);
                    zip.NameTransform = new ZipNameTransform(Server.MapPath("~/DiretorioDestino"));
                    zip.Add(nomeZIP);
                }
     
                zip.CommitUpdate();
                zip.Close();
     
                Response.ClearHeaders();
                Response.ClearContent();
                Response.Clear();
                Response.Buffer = false;
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment;filename=NomeDoArquivo.zip");
     
                FileStream inStr = null;
                byte[] buffer = new byte[1024];
                long byteCount;
     
                inStr = System.IO.File.OpenRead(Server.MapPath("~/DiretorioDestino / NomeDoArquivo.zip "));
                while ((byteCount = inStr.Read(buffer, 0, buffer.Length)) > 0)
                {
                    if (Response.IsClientConnected)
                    {
                        Response.OutputStream.Write(buffer, 0, buffer.Length);
                        Response.Flush();
                    }
                }
                inStr.Close();
    	    Response.End();
    

     

    Abs,

     

    Rafael Zaccanini

    Se a resposta te ajudou marque como útil


    • Sugerido como Resposta Levi DomingosModerator terça-feira, 3 de agosto de 2010 21:29
    • Marcado como Resposta Oda Rob quarta-feira, 4 de agosto de 2010 01:42
    terça-feira, 3 de agosto de 2010 20:51

Todas as Respostas

  • Olá Oda Rob, blza?

    Você conhece o namespace System.IO.Compression ?

    Dá uma olhada nesse exemplo interessante com a classe GZipStream .

    Você ainda pode usar DeflateStream , que implementa algo parecido com o Algoritmo de Huffman.

     

    []z


    bernardorezende.wordpress.com - Arquitetura e Desenvolvimento
    terça-feira, 3 de agosto de 2010 20:29
  • Olá,

    Se estiver procurando algo que dê pra zipar vários arquivos, com estruturas de pastas e tudo mais, recomendo o ZipStorer:

    http://www.codeproject.com/KB/recipes/ZipStorer.aspx


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    terça-feira, 3 de agosto de 2010 20:36
    Moderador
  • Oda,

     

    Tem a DotNetZip: http://dotnetzip.codeplex.com/

     

    É bem simples de usar (exemplo do próprio projeto)...

     using (ZipFile zip = new ZipFile())
     {
       // add this map file into the "images" directory in the zip archive
       zip.AddFile("c:\\images\\personal\\7440-N49th.png", "images");
       // add the report into a different directory in the archive
       zip.AddFile("c:\\Reports\\2008-Regional-Sales-Report.pdf", "files");
       zip.AddFile("ReadMe.txt");
       zip.Save("MyZipFile.zip");
     }
    

     

    Abraço,

     


    Ricardo Alves
    ricardoalves.me
    • Sugerido como Resposta RicardoAlves terça-feira, 3 de agosto de 2010 20:42
    terça-feira, 3 de agosto de 2010 20:41
  • Olá Oda,

     

    Existe uma bibliteca chamada SharpZipLib (http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx) que é muito útil para o problema em questão.

    Segue um exemplo de utilização da mesma:

     

    Importe a referência

    using ICSharpCode.SharpZipLib.Zip;
    

    E após

          //PROCESSO DE COMPACTAÇÃO
                ZipOutputStream zipOutPut = new ZipOutputStream(System.IO.File.Create(Server.MapPath("~/Diretorio/NomeDoArquivo.zip")));
                //Compactação nivel 9
                zipOutPut.SetLevel(9);
                zipOutPut.Finish();
                zipOutPut.Close();
     
                ZipFile zip = new ZipFile(Server.MapPath("~/Diretorio/NomeDoArquivo.zip"));
                //Inicia a criação do ZIP
                zip.BeginUpdate();
     
     
                DirectoryInfo DirInfo = new DirectoryInfo(Server.MapPath("~/DiretorioDestino/"));
                FileInfo[] AllFiles = DirInfo.GetFiles();
                foreach (FileInfo FileTxt in AllFiles)
                {
                    //Adicionando arquivos previamente criados ao zipFile
                    string nomeZIP = Server.MapPath("~/DiretorioDestino/" + FileTxt.Name);
                    zip.NameTransform = new ZipNameTransform(Server.MapPath("~/DiretorioDestino"));
                    zip.Add(nomeZIP);
                }
     
                zip.CommitUpdate();
                zip.Close();
     
                Response.ClearHeaders();
                Response.ClearContent();
                Response.Clear();
                Response.Buffer = false;
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment;filename=NomeDoArquivo.zip");
     
                FileStream inStr = null;
                byte[] buffer = new byte[1024];
                long byteCount;
     
                inStr = System.IO.File.OpenRead(Server.MapPath("~/DiretorioDestino / NomeDoArquivo.zip "));
                while ((byteCount = inStr.Read(buffer, 0, buffer.Length)) > 0)
                {
                    if (Response.IsClientConnected)
                    {
                        Response.OutputStream.Write(buffer, 0, buffer.Length);
                        Response.Flush();
                    }
                }
                inStr.Close();
    	    Response.End();
    

     

    Abs,

     

    Rafael Zaccanini

    Se a resposta te ajudou marque como útil


    • Sugerido como Resposta Levi DomingosModerator terça-feira, 3 de agosto de 2010 21:29
    • Marcado como Resposta Oda Rob quarta-feira, 4 de agosto de 2010 01:42
    terça-feira, 3 de agosto de 2010 20:51
  • Novamente era exatamente o que eu queria Rafael....

     

    Tnks d novo !!

    quarta-feira, 4 de agosto de 2010 01:43