
Os arquivos ZIP são usados para compactar e manter um ou mais arquivos ou pastas em um único contêiner. Um arquivo ZIP encapsula os arquivos e pastas, bem como mantém suas informações de metadados. O uso mais comum do arquivamento é reduzir o tamanho dos arquivos para armazenamento ou transmissão e aplicar criptografia para segurança. Além das ferramentas de compactação de arquivos, os recursos automatizados de compactação/extração também são usados em vários aplicativos de desktop e web para upload, download, compartilhamento ou criptografia dos arquivos. Este artigo também visa cenários semelhantes e apresenta algumas maneiras fáceis de compactar arquivos ou pastas e criar arquivos ZIP programaticamente usando C#.
Neste artigo, você aprenderá como realizar as seguintes operações de arquivamento ZIP:
- Crie um arquivo ZIP usando C#
- Adicionar vários arquivos a um arquivo ZIP
- Adicionar pastas a um arquivo ZIP
- Crie um arquivo ZIP protegido por senha usando ZipCrypto
- Criptografe o arquivo ZIP com criptografia AES
- Definir o modo de compressão paralela
Biblioteca C# ZIP
Aspose.ZIP for .NET é uma API poderosa e fácil de usar para compactar ou descompactar arquivos e pastas dentro de aplicativos .NET. Ele também fornece técnicas de criptografia AES para criptografar os arquivos em ZIP em C#. Você pode instalar a API de NuGet ou baixar seus binários da seção Downloads.
Criar um arquivo ZIP em C#
A seguir estão as etapas para compactar um arquivo adicionando-o a um arquivo ZIP:
- Crie um objeto FileStream para o arquivo ZIP de saída.
- Abra o arquivo de origem em um objeto FileStream.
- Crie um objeto da classe Arquivo.
- Adicione o arquivo ao arquivo usando o método Archive.CreateEntry(string, FileStream).
- Crie o arquivo ZIP usando o método Archive.Save(FileStream).
O exemplo de código a seguir mostra como adicionar um arquivo a um arquivo ZIP usando C#.
// Criar FileStream para arquivo ZIP de saída
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
// Arquivo a ser adicionado ao arquivo
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive(new ArchiveEntrySettings()))
{
// Adicionar arquivo ao arquivo
archive.CreateEntry("alice29.txt", source1);
// arquivo ZIP
archive.Save(zipFile);
}
}
}
Adicionar vários arquivos ao arquivo ZIP em C#
Caso você queira adicionar vários arquivos em um arquivo ZIP, você pode fazê-lo usando uma das seguintes maneiras.
C# ZIP vários arquivos usando FileStream
Nesse método, a classe FileStream é usada para adicionar arquivos ao arquivo ZIP usando o método Archive.CreateEntry(String, FileStream). O exemplo de código a seguir mostra como adicionar vários arquivos em um ZIP em C#.
// Criar FileStream para arquivo ZIP de saída
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Arquivo a ser adicionado ao arquivo
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
// Arquivo a ser adicionado ao arquivo
using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
// Adicionar arquivos ao arquivo
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik3.txt", source2);
// ZIP os arquivos
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
}
}
}
}
C# ZIP vários arquivos usando FileInfo
Você também pode usar a classe FileInfo para adicionar vários arquivos em um arquivo ZIP. Neste método, os arquivos serão carregados usando a classe FileInfo e adicionados ao arquivo ZIP usando o método Archive.CreateEntry(String, FileInfo). O exemplo de código a seguir mostra como ZIP vários arquivos usando a classe FileInfo em C#.
// Criar FileStream para arquivo ZIP de saída
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Arquivos a serem adicionados ao arquivo
FileInfo fi1 = new FileInfo("alice29.txt");
FileInfo fi2 = new FileInfo("fields.c");
using (var archive = new Archive())
{
// Adicionar arquivos ao arquivo
archive.CreateEntry("alice29.txt", fi1);
archive.CreateEntry("fields.c", fi2);
// Criar arquivo ZIP
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}
Arquivos ZIP usando o caminho
Em vez de usar as classes FileInfo ou FileStream para as entradas ZIP, você pode fornecer o caminho do arquivo diretamente para o método Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). O exemplo de código a seguir mostra como ZIP arquivos usando seu caminho.
// Criar FileStream para arquivo ZIP de saída
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
// Criar arquivo
using (var archive = new Archive())
{
// Adicionar arquivo ao arquivo ZIP
archive.CreateEntry("data.bin", "file.dat");
archive.Save(zipFile);
}
}
Adicionar pastas a um arquivo ZIP em C#
Você pode ZIP uma pasta com a biblioteca C# ZIP, que pode ser outra alternativa de adicionar vários arquivos a um arquivo ZIP. Basta colocar os arquivos de origem em uma pasta e adicionar essa pasta ao arquivo ZIP. A seguir estão as etapas para ZIP uma pasta em C#:
- Crie um objeto da classe FileStream para o arquivo ZIP de saída.
- Crie uma instância da classe Arquivo.
- Use a classe DirectoryInfo para especificar a pasta a ser compactada.
- Use o método Archive.CreateEntries(DirectoryInfo) para adicionar a pasta no ZIP.
- Crie o arquivo ZIP usando o método Archive.Save(FileStream).
O exemplo de código a seguir mostra como adicionar uma pasta ao ZIP em C#.
// Criar FileStream para arquivo ZIP de saída
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive())
{
// Pasta a ser compactada
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Criar arquivo ZIP
archive.Save(zipFile);
}
}
Crie um ZIP protegido por senha usando ZipCrypto em C#
Você pode proteger os arquivos ZIP usando senhas e aplicar a criptografia ZipCrypto. Para isso, é utilizada a classe ArchiveEntrySettings no construtor do Archive que aceita o tipo de criptografia como segundo parâmetro.
O exemplo de código a seguir mostra como criar um arquivo ZIP protegido por senha usando ZipCrypto em C#.
// Criar FileStream para arquivo ZIP de saída
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
{
// Adicionar pasta ao arquivo
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Criar arquivo ZIP
archive.Save(zipFile);
}
}
C# Criar ZIP Protegido por Senha com Criptografia AES
O Aspose.ZIP para .NET também permite aplicar criptografia AES para proteger os arquivos ZIP. Você pode usar os seguintes métodos de criptografia AES:
- AES128
- AES192
- AES256
Para aplicar a criptografia AES, a API oferece a classe AesEcryptionSettings. O exemplo de código a seguir mostra como criar um ZIP protegido por senha com criptografia AES em C#.
// Criar FileStream para arquivo ZIP de saída
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
{
// Adicionar pasta ao arquivo
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Criar arquivo ZIP
archive.Save(zipFile);
}
}
Definir modo de compactação paralelo
Você também pode configurar a API para compactação paralela no caso de várias entradas. Para isso, você pode especificar o modo de compactação paralela usando a classe ParallelOptions. O Aspose.ZIP para .NET fornece os seguintes modos de compactação paralelos.
- Nunca - Não comprima em paralelo.
- Sempre - Faça a compactação em paralelo (cuidado com a memória).
- Automático - Decida se deseja usar compactação paralela ou não nas entradas. Esta opção pode comprimir algumas entradas apenas em paralelo.
O exemplo de código a seguir mostra como definir o modo de compactação paralelo ao compactar vários arquivos com a biblioteca C# ZIP do Aspose.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-zip/Aspose.ZIP-for-.NET
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
{
using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik.txt", source2);
//Defina o critério de paralelismo
var parallelOptions = new ParallelOptions
{
ParallelCompressInMemory = ParallelCompressionMode.Always
};
archive.Save(zipFile,
new ArchiveSaveOptions()
{
ParallelOptions = parallelOptions,
Encoding = Encoding.ASCII,
ArchiveComment = "There are two poems from Canterbury corpus"
});
}
}
}
}
Saiba mais sobre a biblioteca C# .NET ZIP
Explore mais sobre nossa API C# ZIP usando os seguintes recursos:
Conclusão
Neste artigo, você aprendeu como criar arquivos ZIP programaticamente em C#. Os exemplos de código demonstraram como adicionar arquivos e pastas nos arquivos ZIP. Além disso, também abordamos como criar arquivos ZIP protegidos por senha com métodos de criptografia ZipCrypto e AES usando a biblioteca ZIP do C# Aspose. Além disso, a compactação paralela de várias entradas também é discutida no final. Caso você tenha alguma dúvida ou pergunta, você pode nos perguntar através do nosso fórum.