Nel post precedente, ho discusso diversi modi per creare archivi ZIP usando C#. L’articolo spiegava anche come creare archivi ZIP crittografati e protetti da password. Oltre al formato ZIP, ci sono altri formati di archivio comunemente usati come 7z, tar, RAR, ecc. Tra questi, il formato di archivio 7z si basa sull’architettura open-source e viene utilizzato per comprimere file e cartelle con un rapporto di compressione elevato. Supporta anche la crittografia AES a 256 bit e consente anche di crittografare i nomi dei file. In questo articolo dimostrerò come creare archivi 7z (7-Zip) a livello di codice usando C#.
Questo articolo è suddiviso nelle seguenti sezioni:
- Crea un archivio 7z (7-Zip) usando C#
- Crea un archivio 7z crittografato AES utilizzando C#
- Imposta password diverse per voci 7z utilizzando C#
Tutti i passaggi e gli esempi di codice in questo articolo sono basati su Aspose.ZIP for .NET. Pertanto, assicurati di aver installato l’API utilizzando uno dei seguenti metodi:
- Installa utilizzando NuGet Package Manager.
- Scarica DLL and add its reference to the project.
Crea un archivio 7z (7-Zip) usando C#
Potrebbero esserci due possibili scenari di compressione dei file in un archivio 7z. O hai solo un singolo file o potrebbero esserci molti file da comprimere. Puoi gestire entrambi gli scenari in modo esplicito.
Crea archivio 7z con voce singola
Di seguito sono riportati i passaggi per creare un archivio 7z con una singola voce.
- Apri un nuovo FileStream per creare un file 7z.
- Crea un’istanza della classe SevenZipArchive.
- Aggiungi il file all’archivio usando il metodo SevenZipArchive.CreateEntry(String, String, Boolean, SevenZipEntrySettings).
- Crea e salva l’archivio usando il metodo SevenZipArchive.Save(Stream).
L’esempio di codice seguente mostra come creare un archivio 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);
}
}
Crea un archivio 7z con più voci
In questo caso, puoi mettere i file in una cartella e passare il percorso della cartella al metodo SevenZipArchive.CreateEntries(). Di seguito sono riportati i passaggi per aggiungere più voci di file a un archivio 7z.
- Crea un’istanza della classe SevenZipArchive.
- Passa il percorso della cartella al metodo SevenZipArchive.CreateEntries(String, Boolean).
- Chiama il metodo SevenZipArchive.Save(String).
L’esempio di codice seguente mostra come creare un archivio 7z con più voci usando C#.
using (SevenZipArchive archive = new SevenZipArchive())
{
archive.CreateEntries(dataDir);
archive.Save("SevenZip.7z");
}
Crea un archivio 7z crittografato AES utilizzando C#
Il formato 7z supporta la crittografia AES per proteggere i file. Per crittografare un file 7z, viene utilizzata la classe SevenZipAESEncryptionSettings. L’esempio di codice seguente mostra come creare un archivio 7z crittografato 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");
}
Imposta password diverse per voci 7z utilizzando C#
Il formato 7z consente inoltre di specificare una password diversa per ogni voce di file. Ad esempio, se intendi comprimere due file in un archivio 7z, puoi specificare una password diversa per ciascun file. Di seguito sono riportati i passaggi per impostare password diverse per le voci 7z.
- Crea un nuovo FileStream per il file di archivio 7z.
- Accedi a ogni voce di file utilizzando la classe FileInfo.
- Crea un’istanza della classe SevenZipArchive.
- Crea una voce nell’archivio 7z usando SevenZipArchive.CreateEntry(String, FileInfo, Boolean, SevenZipEntrySettings)
- Salva l’archivio usando il metodo SevenZipArchive.Save(Stream).
L’esempio di codice seguente mostra come impostare una password per ogni voce in un archivio 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);
}
}
Conclusione
In questo articolo abbiamo imparato come creare archivi 7z a livello di codice usando C#. Inoltre, abbiamo visto come creare file 7z crittografati AES e impostare una password per ogni voce di file. Puoi saperne di più sulla compressione/decompressione dei file da qui.