No post anterior, discuti diferentes maneiras de criar arquivos ZIP usando C#. O artigo também abordou como criar arquivos ZIP criptografados e protegidos por senha. Além do formato ZIP, existem alguns outros formatos de arquivo comumente usados, como 7z, tar, RAR, etc. Entre estes, o formato de arquivo 7z é baseado na arquitetura de código aberto e é usado para compactar arquivos e pastas com alta taxa de compactação. Ele também suporta criptografia AES de 256 bits e também permite criptografar os nomes dos arquivos. Neste artigo, demonstrarei como criar arquivos 7z (7-Zip) programaticamente usando C#.
Este artigo está dividido nas seguintes seções:
- Crie um arquivo 7z (7-Zip) usando C#
- Criar um arquivo 7z criptografado AES usando C#
- Definir senhas diferentes para entradas 7z usando C#
Todas as etapas e exemplos de código neste artigo são baseados em Aspose.ZIP para .NET. Portanto, certifique-se de ter instalado a API usando um dos seguintes métodos:
- Instale usando o Gerenciador de Pacotes NuGet.
- Download DLL and add its reference to the project.
Criar arquivo 7z (7-Zip) usando C#
Pode haver dois cenários possíveis de compactação de arquivos em um arquivo 7z. Ou você tem apenas um único arquivo ou pode haver vários arquivos a serem compactados. Você pode lidar com ambos os cenários explicitamente.
Criar arquivo 7z com entrada única
A seguir estão as etapas para criar um arquivo 7z com uma única entrada.
- Abra um novo FileStream para criar um arquivo 7z.
- Crie uma instância da classe SevenZipArchive.
- Adicione o arquivo ao arquivo usando o método SevenZipArchive.CreateEntry(String, String, Boolean, SevenZipEntrySettings).
- Crie e salve o arquivo usando o método SevenZipArchive.Save(Stream).
O exemplo de código a seguir mostra como criar um arquivo 7z (7-Zip) usando C#.
using (FileStream sevenZipFile = File.Open("archive.7z", FileMode.Create))
{
using (var archive = new SevenZipArchive())
{
archive.CreateEntry("data.bin", "file.dat");
archive.Save(sevenZipFile);
}
}
Criar arquivo 7z com várias entradas
Neste caso, você pode colocar os arquivos em uma pasta e passar o caminho da pasta para o método SevenZipArchive.CreateEntries(). A seguir estão as etapas para adicionar várias entradas de arquivo a um arquivo 7z.
- Crie uma instância da classe SevenZipArchive.
- Passe o caminho da pasta para o método SevenZipArchive.CreateEntries(String, Boolean).
- Chame o método SevenZipArchive.Save(String).
O exemplo de código a seguir mostra como criar um arquivo 7z com várias entradas usando C#.
using (SevenZipArchive archive = new SevenZipArchive())
{
archive.CreateEntries(dataDir);
archive.Save("SevenZip.7z");
}
Criar um arquivo 7z criptografado AES usando C#
O formato 7z suporta criptografia AES para proteger os arquivos. Para criptografar um arquivo 7z, a classe SevenZipAESEncryptionSettings é usada. O exemplo de código a seguir mostra como criar um arquivo 7z criptografado por AES usando C#.
using (var archive = new SevenZipArchive(new SevenZipEntrySettings(null, new SevenZipAESEncryptionSettings("p@s$"))))
{
archive.CreateEntry("data.bin", new MemoryStream(new byte[] { 0x00, 0xFF }));
archive.Save("archive.7z");
}
Definir senhas diferentes para entradas 7z usando C#
O formato 7z também permite especificar uma senha diferente para cada entrada de arquivo. Por exemplo, se você for compactar dois arquivos em um arquivo 7z, poderá especificar uma senha diferente para cada arquivo. A seguir estão as etapas para definir senhas diferentes para entradas 7z.
- Crie um novo FileStream para o arquivo 7z.
- Acesse cada entrada de arquivo usando a classe FileInfo.
- Crie uma instância da classe SevenZipArchive.
- Crie uma entrada no arquivo 7z usando SevenZipArchive.CreateEntry(String, FileInfo, Boolean, SevenZipEntrySettings)
- Salve o arquivo usando o método SevenZipArchive.Save(Stream).
O exemplo de código a seguir mostra como definir uma senha para cada entrada em um arquivo 7z.
using (FileStream sevenZipFile = File.Open("archive.7z", FileMode.Create))
{
FileInfo fi1 = new FileInfo("data1.bin");
FileInfo fi2 = new FileInfo("data2.bin");
FileInfo fi3 = new FileInfo("data3.bin");
using (var archive = new SevenZipArchive())
{
archive.CreateEntry("entry1.bin", fi1, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test1")));
archive.CreateEntry("entry2.bin", fi2, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test2")));
archive.CreateEntry("entry3.bin", fi3, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test3")));
archive.Save(sevenZipFile);
}
}
Conclusão
Neste artigo, aprendemos como criar arquivos 7z programaticamente usando C#. Além disso, vimos como criar arquivos 7z criptografados por AES e definir uma senha para cada entrada de arquivo. Você pode aprender mais sobre compressão/descompressão de arquivos aqui.