<< Click to Display Table of Contents >> Compactando arquivos (zip) |
![]() ![]() ![]() |
Link para componente free
ICSharpCode.SharpZipLib.dll
http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx
Default.aspx
<form id="form1" runat="server">
<div>
<br />
<asp:Button ID="btnCompacDir" runat="server" OnClick="btnCompacDir_Click" Text="Compactar um diretorio" />
<br />
<br />
<asp:Button ID="btnCompac1" runat="server" OnClick="btnCompac1_Click" Text="Compactar um arquivo" />
<br />
<br />
<br />
<asp:Button ID="btnDescompactar" runat="server" OnClick="btnDescompactar_Click" Text="Descompactar" />
</div>
</form>
Default.aspx.cs
using System;
using System.Web;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
// modo 1 - compactar um diretorio e seus subs, gerando 1 arquivo zip
public void GerarZipDeDiretorio(string DiretorioOrigem, string DiretorioDestino)
{
// valida diretorios
if (!DiretorioOrigem.EndsWith("\\"))
DiretorioOrigem += "\\";
if (!DiretorioDestino.EndsWith("\\"))
DiretorioDestino += "\\";
if (!Directory.Exists(DiretorioDestino) || !Directory.Exists(DiretorioOrigem))
{
// diretório destino OU origem não existe
return;
}
FastZip zip = new FastZip();
string nomeArquivo = "Zipado.zip"; // gerar nome de arquivo aleatório: +Guid.NewGuid().ToString().Substring(0, 6) + ".zip";
zip.CreateZip(DiretorioDestino + nomeArquivo, DiretorioOrigem, true, "");
// joga arquivo zip para browser!
HttpContext.Current.Response.TransmitFile(DiretorioDestino + nomeArquivo);
zip = null;
}
// modo 2 - gerar um zip de um unico arquivo
public void GerarZipDeUmArquivo(string Arquivo, string DiretorioDestino)
{
// arquivo não existe
if (!File.Exists(Arquivo))
return;
if (!DiretorioDestino.EndsWith("\\"))
DiretorioDestino += "\\";
if (!Directory.Exists(DiretorioDestino))
{
// diretório destino OU origem não existe
return;
}
FastZip zip = new FastZip();
string nomeArquivo = "ZipadoUnico.zip"; // gerar nome de arquivo aleatório: +Guid.NewGuid().ToString().Substring(0, 6) + ".zip";
zip.CreateZip(DiretorioDestino + nomeArquivo, Path.GetDirectoryName(Arquivo), false, Path.GetFileName(Arquivo));
HttpContext.Current.Response.TransmitFile(DiretorioDestino + nomeArquivo);
zip = null;
}
// descompactar um arquivo zip para um destino
public void Descompactar(string ArquivoZip, string DiretorioDestino)
{
if (!File.Exists(ArquivoZip))
{
// arquivo não existe
return;
}
if (!DiretorioDestino.EndsWith("\\"))
DiretorioDestino += "\\";
if (!Directory.Exists(DiretorioDestino))
{
// diretório destino OU origem não existe
return;
}
FastZip zip = new FastZip();
zip.ExtractZip(ArquivoZip, DiretorioDestino, "");
zip = null;
}
// modo 3 - compactar 1 arquivo, porém usando stream - mais complicado
public void GerarZipDeUmArquivoStream(string Arquivo, string DiretorioDestino)
{
// arquivo não existe
if (!File.Exists(Arquivo))
return;
if (!DiretorioDestino.EndsWith("\\"))
DiretorioDestino += "\\";
if (!Directory.Exists(DiretorioDestino))
{
// diretório destino OU origem não existe
return;
}
string ArquivoZip = "ZipadoUnicoStream.zip";
ZipOutputStream zstream = new ZipOutputStream(File.Create(DiretorioDestino + ArquivoZip));
// compressão máxima
zstream.SetLevel(9);
// lê o arquivo, byte a byte
FileStream fstream = File.OpenRead(Arquivo);
Byte[] bt = new Byte[fstream.Length];
fstream.Read(bt, 0, bt.Length);
string[] auxiliar = Arquivo.Split('\\');
ZipEntry entry = new ZipEntry(auxiliar[auxiliar.Length - 1]);
entry.DateTime = DateTime.Now;
entry.Size = fstream.Length;
fstream.Close();
zstream.PutNextEntry(entry);
zstream.Write(bt, 0, bt.Length);
zstream.Finish();
zstream.Close();
HttpContext.Current.Response.TransmitFile(DiretorioDestino + ArquivoZip);
}
protected void btnCompacDir_Click(object sender, EventArgs e)
{
GerarZipDeDiretorio(Server.MapPath("") + "\\origem", Server.MapPath("") + "\\destino");
}
protected void btnCompac1_Click(object sender, EventArgs e)
{
// compactar 1 arquivo - modo simples
GerarZipDeUmArquivo(Server.MapPath("") + "\\origem\\Pioneiros auxiliares em março 2010.doc", Server.MapPath("") + "\\destino");
// compactar 1 arquivo - modo stream
GerarZipDeUmArquivoStream(Server.MapPath("") + "\\origem\\Pioneiros auxiliares em março 2010.doc", Server.MapPath("") + "\\destino");
}
protected void btnDescompactar_Click(object sender, EventArgs e)
{
Descompactar(Server.MapPath("") + "\\origem\\Zipado.zip", Server.MapPath("") + "\\destino\\a");
}
}