Usuário com melhor resposta
Bilblioteca para compactar arquivos

Pergunta
-
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,
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
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- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 3 de agosto de 2010 20:42
-
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- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 3 de agosto de 2010 20:42
-
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
-
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,
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
-