Como compactar arquivos em uma pasta usando C#
Arquivos ZIP são arquivos que contêm um ou mais arquivos ou pastas comprimidos usando o formato ZIP. É uma forma comum de comprimir e arquivar múltiplos arquivos ou pastas em um único arquivo. Eles podem reduzir o tamanho dos dados, economizar espaço em disco e facilitar a transferência de arquivos pela internet. Neste artigo, você aprenderá como trabalhar com arquivos ZIP em C# usando a biblioteca IronZIP. Você verá como criar, ler, extrair e atualizar arquivos ZIP programaticamente, bem como como usar vários recursos do IronZIP, como criptografia, proteção por senha e níveis de compressão. Ao final deste artigo, você será capaz de usar o IronZIP para lidar com arquivos ZIP em suas aplicações C# com facilidade.
O que Vamos Cobrir neste Artigo
- Instalar IronZIP em nosso Projeto
- Criar um arquivo ZIP
- Criar arquivo ZIP Protegido por Senha
- Extrair arquivo ZIP
- Extrair Arquivo ZIP Protegido por Senha
- Acessar Arquivo ZIP Existente
O que é IronZIP?
IronZIP é uma poderosa e versátil biblioteca C# de arquivos ZIP que permite criar, ler e extrair arquivos ZIP programaticamente. Ela suporta vários formatos de arquivo, como ZIP, TAR, GZIP e BZIP2. Também suporta proteção por senha, criptografia e níveis de compressão. IronZIP é compatível com .NET 8, 7, 6, Core, Standard e Framework.
IronZIP pode ajudá-lo a lidar com vários casos de uso e benefícios de trabalhar com arquivos ZIP, como:
- Criando um sistema de backup: Você pode usar o IronZIP para comprimir e criptografar seus arquivos e pastas importantes em um arquivo ZIP e armazená-los em um local seguro. Desta forma, você pode economizar espaço em disco e proteger seus dados contra acesso não autorizado.
- Enviando anexos de email: Você pode usar o IronZIP para reduzir o tamanho dos seus anexos de email, compactando-os em um arquivo ZIP. Isso pode ajudá-lo a evitar exceder o limite de tamanho de arquivo e acelerar o processo de transmissão.
- Baixar arquivos da web: Você pode usar o IronZIP para baixar e extrair arquivos ZIP da web, como pacotes de software, documentos, imagens e outros tipos de arquivos. Isso pode ajudá-lo a economizar largura de banda e tempo e acessar os arquivos de que precisa com facilidade.
Começando com o IronZIP
Antes de escrever o código, você precisa instalar o pacote NuGet IronZIP em seu projeto C#. IronZIP é uma biblioteca de compressão popular disponível via NuGet.
Instalando a Biblioteca IronZIP
Para instalar o IronZIP, você pode usar o Console do Gerenciador de Pacotes NuGet no Visual Studio. Basta executar o seguinte comando:
Alternativamente, você pode baixar o pacote diretamente do site oficial do IronZIP. Uma vez instalado, você pode começar adicionando o seguinte namespace no topo do seu código C#.
using IronZip;Imports IronZipImports IronZipCriando Arquivos ZIP em Uma Pasta no C#
Você pode facilmente criar arquivos ZIP em uma pasta usando o IronZIP. O código a seguir compactará todos os arquivos do diretório especificado.
using System;
using System.IO;
using IronZip;
class Program
{
static void Main(string[] args)
{
// Get all files from the specified directory
string[] fileArray = Directory.GetFiles(@"D:\Docs\");
// Create a new ZIP archive
using (var archive = new IronZipArchive())
{
// Iterate through each file and add it to the archive
foreach (var file in fileArray)
{
archive.Add(file); // Add files to the ZIP
}
// Save the archive to a file
archive.SaveAs("myZipFile.zip");
}
}
}using System;
using System.IO;
using IronZip;
class Program
{
static void Main(string[] args)
{
// Get all files from the specified directory
string[] fileArray = Directory.GetFiles(@"D:\Docs\");
// Create a new ZIP archive
using (var archive = new IronZipArchive())
{
// Iterate through each file and add it to the archive
foreach (var file in fileArray)
{
archive.Add(file); // Add files to the ZIP
}
// Save the archive to a file
archive.SaveAs("myZipFile.zip");
}
}
}Imports System
Imports System.IO
Imports IronZip
Module Program
Sub Main(ByVal args As String())
' Get all files from the specified directory
Dim fileArray As String() = Directory.GetFiles("D:\Docs\")
' Create a new ZIP archive
Using archive As New IronZipArchive()
' Iterate through each file and add it to the archive
For Each file As String In fileArray
archive.Add(file) ' Add files to the ZIP
Next
' Save the archive to a file
archive.SaveAs("myZipFile.zip")
End Using
End Sub
End ModuleImports System
Imports System.IO
Imports IronZip
Module Program
Sub Main(ByVal args As String())
' Get all files from the specified directory
Dim fileArray As String() = Directory.GetFiles("D:\Docs\")
' Create a new ZIP archive
Using archive As New IronZipArchive()
' Iterate through each file and add it to the archive
For Each file As String In fileArray
archive.Add(file) ' Add files to the ZIP
Next
' Save the archive to a file
archive.SaveAs("myZipFile.zip")
End Using
End Sub
End ModuleO código C# acima usa a biblioteca IronZIP para comprimir todos os arquivos em um único arquivo ZIP. O código faz o seguinte:
- Declara um array de strings chamado
fileArraye atribui a ele o resultado do métodoDirectory.GetFiles, passando o caminho do diretório ("D:\Docs") como um parâmetro. Este método retorna um array de strings contendo os nomes completos de todos os arquivos no diretório especificado. - Cria uma nova instância da classe
IronZipArchive, que representa um arquivo ZIP na memória. A instância é atribuída a uma variável chamadaarchivee é envolvida em uma declaraçãousing, que garante que o arquivo ZIP seja descartado quando o bloco de código terminar. - Itera sobre o array
fileArrayusando um loopforeach, e para cada arquivo, chama o métodoAdddo objetoarchive, passando o nome do arquivo como parâmetro. Este método adiciona uma nova entrada ao arquivo ZIP, com o mesmo nome e conteúdo do arquivo. - Chama o método
SaveAsdo objetoarchive, passando o nome do arquivo ZIP ("myZipFile.zip") como um parâmetro. Este método salva o arquivo ZIP para um arquivo no sistema de arquivos atual.
Desta forma, você pode criar novos arquivos ZIP facilmente usando apenas algumas linhas de código.
Saída
A saída é a seguinte:

Criar um arquivo ZIP protegido por senha
IronZIP fornece um método fácil para criar arquivos ZIP protegidos por senha. O seguinte exemplo de código irá comprimir arquivos e criar um novo arquivo ZIP com uma senha.
using System;
using System.IO;
using IronZip;
class Program
{
static void Main(string[] args)
{
// Get all files from the specified directory
string[] fileArray = Directory.GetFiles(@"D:\Docs\");
// Create a new ZIP archive
using (var archive = new IronZipArchive())
{
// Iterate through each file and add it to the archive
foreach (var file in fileArray)
{
archive.Add(file); // Add files to the ZIP
}
// Set Password and Encryption Method
archive.Encrypt("myPa55word", EncryptionMethods.AES256);
// Save the archive to a file
archive.SaveAs("myZipFile.zip");
}
}
}using System;
using System.IO;
using IronZip;
class Program
{
static void Main(string[] args)
{
// Get all files from the specified directory
string[] fileArray = Directory.GetFiles(@"D:\Docs\");
// Create a new ZIP archive
using (var archive = new IronZipArchive())
{
// Iterate through each file and add it to the archive
foreach (var file in fileArray)
{
archive.Add(file); // Add files to the ZIP
}
// Set Password and Encryption Method
archive.Encrypt("myPa55word", EncryptionMethods.AES256);
// Save the archive to a file
archive.SaveAs("myZipFile.zip");
}
}
}Imports System
Imports System.IO
Imports IronZip
Module Program
Sub Main(args As String())
' Get all files from the specified directory
Dim fileArray As String() = Directory.GetFiles("D:\Docs\")
' Create a new ZIP archive
Using archive As New IronZipArchive()
' Iterate through each file and add it to the archive
For Each file In fileArray
archive.Add(file) ' Add files to the ZIP
Next
' Set Password and Encryption Method
archive.Encrypt("myPa55word", EncryptionMethods.AES256)
' Save the archive to a file
archive.SaveAs("myZipFile.zip")
End Using
End Sub
End ModuleImports System
Imports System.IO
Imports IronZip
Module Program
Sub Main(args As String())
' Get all files from the specified directory
Dim fileArray As String() = Directory.GetFiles("D:\Docs\")
' Create a new ZIP archive
Using archive As New IronZipArchive()
' Iterate through each file and add it to the archive
For Each file In fileArray
archive.Add(file) ' Add files to the ZIP
Next
' Set Password and Encryption Method
archive.Encrypt("myPa55word", EncryptionMethods.AES256)
' Save the archive to a file
archive.SaveAs("myZipFile.zip")
End Using
End Sub
End ModuleA linha archive.Encrypt("myPa55word", EncryptionMethods.AES256); define uma senha ("myPa55word") para um arquivo ZIP usando IronZIP. Ela aprimora a segurança aplicando criptografia AES-256 ao arquivo, garantindo que apenas usuários com a senha correta possam acessar seu conteúdo. Este recurso é valioso para proteger dados sensíveis durante o armazenamento ou transferência dentro de aplicativos C#. Você precisa passar o modo especificado do algoritmo de criptografia no segundo parâmetro.
O arquivo é criptografado como mostrado abaixo.
Saída

Vimos a demonstração de criação de um arquivo ZIP ao percorrer os diretórios a partir do caminho especificado. Agora, vamos seguir para o exemplo de descompactar arquivos.
Extraindo arquivos de um arquivo ZIP
IronZIP fornece um método para extrair arquivos de um arquivo ZIP em C#. O seguinte exemplo de código irá extrair o arquivo compactado dentro de um arquivo ZIP.
using IronZip;
class Program
{
static void Main(string[] args)
{
// Extract all files from the ZIP archive to the specified directory
IronZipArchive.ExtractArchiveToDirectory("myZipFile.zip", "myExtractedFiles");
}
}using IronZip;
class Program
{
static void Main(string[] args)
{
// Extract all files from the ZIP archive to the specified directory
IronZipArchive.ExtractArchiveToDirectory("myZipFile.zip", "myExtractedFiles");
}
}Imports IronZip
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Extract all files from the ZIP archive to the specified directory
IronZipArchive.ExtractArchiveToDirectory("myZipFile.zip", "myExtractedFiles")
End Sub
End ClassImports IronZip
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Extract all files from the ZIP archive to the specified directory
IronZipArchive.ExtractArchiveToDirectory("myZipFile.zip", "myExtractedFiles")
End Sub
End ClassO código IronZipArchive.ExtractArchiveToDirectory("myZipFile.zip", "myExtractedFiles"); usa IronZIP para extrair todos os arquivos de "myZipFile.zip" e colocá-los no diretório "myExtractedFiles". Este método conciso simplifica o processo de extração de arquivos ZIP em C#, fornecendo uma solução conveniente para tarefas de extração de arquivos.
Saída
A saída é a seguinte:

Como extrair de um arquivo ZIP protegido por senha
IronZIP também fornece um método para extrair arquivos ZIP protegidos por senha. O seguinte código usará o método IronZIP para extrair todos os arquivos e diretórios existentes do arquivo ZIP especificado.
using IronZip;
class Program
{
static void Main(string[] args)
{
// Extract all files from the password-protected ZIP archive to the specified directory
IronZipArchive.ExtractArchiveToDirectory("myZipFile.zip", "myExtractedFiles", "myPa55word");
}
}using IronZip;
class Program
{
static void Main(string[] args)
{
// Extract all files from the password-protected ZIP archive to the specified directory
IronZipArchive.ExtractArchiveToDirectory("myZipFile.zip", "myExtractedFiles", "myPa55word");
}
}Imports IronZip
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Extract all files from the password-protected ZIP archive to the specified directory
IronZipArchive.ExtractArchiveToDirectory("myZipFile.zip", "myExtractedFiles", "myPa55word")
End Sub
End ClassImports IronZip
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Extract all files from the password-protected ZIP archive to the specified directory
IronZipArchive.ExtractArchiveToDirectory("myZipFile.zip", "myExtractedFiles", "myPa55word")
End Sub
End ClassO método ExtractArchiveToDirectory da classe IronZipArchive extrai todas as entradas de um arquivo ZIP para um diretório especificado. Ele passa três argumentos para o método: o caminho do arquivo ZIP ("myZipFile.zip"), o caminho do diretório de destino ("myExtractedFiles") e a senha do arquivo ZIP ("myPa55word").
Desta forma, você pode facilmente extrair arquivos ZIP protegidos por senha.
Como acessar um arquivo existente
IronZIP fornece métodos para acessar o arquivo existente e visualizar todas as entradas presentes no arquivo.
using System;
using System.Collections.Generic;
using IronZip;
class Program
{
static void Main(string[] args)
{
// Open an existing ZIP archive with a password
using (var archive = new IronZipArchive("myZipFile.zip", "myPa55word"))
{
// Get entries list
List<string> names = archive.GetArchiveEntryNames();
// Iterate through each entry name and print it
foreach (string name in names)
{
Console.WriteLine(name);
}
}
}
}using System;
using System.Collections.Generic;
using IronZip;
class Program
{
static void Main(string[] args)
{
// Open an existing ZIP archive with a password
using (var archive = new IronZipArchive("myZipFile.zip", "myPa55word"))
{
// Get entries list
List<string> names = archive.GetArchiveEntryNames();
// Iterate through each entry name and print it
foreach (string name in names)
{
Console.WriteLine(name);
}
}
}
}Imports System
Imports System.Collections.Generic
Imports IronZip
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Open an existing ZIP archive with a password
Using archive = New IronZipArchive("myZipFile.zip", "myPa55word")
' Get entries list
Dim names As List(Of String) = archive.GetArchiveEntryNames()
' Iterate through each entry name and print it
For Each name As String In names
Console.WriteLine(name)
Next name
End Using
End Sub
End ClassImports System
Imports System.Collections.Generic
Imports IronZip
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Open an existing ZIP archive with a password
Using archive = New IronZipArchive("myZipFile.zip", "myPa55word")
' Get entries list
Dim names As List(Of String) = archive.GetArchiveEntryNames()
' Iterate through each entry name and print it
For Each name As String In names
Console.WriteLine(name)
Next name
End Using
End Sub
End ClassO código C# fornecido usa IronZIP para criar uma instância segura IronZipArchive carregando um arquivo ZIP chamado "myZipFile.zip" com a senha "myPa55word". Não passe o parâmetro da senha se o arquivo não estiver criptografado. Em seguida, ele recupera e imprime a lista de nomes de entradas (nomes de arquivos e pastas) dentro do arquivo ZIP criptografado.
O método GetArchiveEntryNames coleta os nomes das entradas, e um loop foreach exibe cada nome no console. Isso demonstra como o IronZIP permite o acesso seguro e a recuperação de informações de entradas de arquivos ZIP protegidos por senha de maneira concisa.
Saída

Conclusão
Em conclusão, o IronZIP prova ser uma biblioteca C# robusta e versátil para trabalhar com arquivos ZIP. Seus recursos se estendem além da compressão e extração básicas, oferecendo funcionalidades como proteção por senha, criptografia e compatibilidade com vários formatos de arquivo. Seja criando sistemas de backup, gerenciando anexos de e-mail ou baixando arquivos da web, o IronZIP simplifica essas tarefas com simplicidade e eficiência.
Ao integrar o IronZIP em seus aplicativos C#, você obtém uma ferramenta poderosa para lidar com arquivos ZIP, aumentar a segurança dos dados e otimizar processos de transferência de arquivos. Você pode se beneficiar de um teste gratuito conforme necessário.
Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.