Il formato 7z è una scelta popolare per la compressione e la distribuzione ad alto tasso. con Aspose.ZIP per .NET, è possibile creare archivi 7Z in modo programmatico utilizzando un semplice, moderno API. Questo guide passa attraverso un esempio di lavoro minimo e aggiunge modelli pratici per progetti reali, come l’aggiunta di file dal disco, i dati streaming dalla memoria, il controllo dei nomi di ingresso e delle cartelle all’interno dell’archivio, e il trattamento di errori di base.
Tutti i campioni di codice sono inline e auto-contenuti.
Prerequisiti
- .NET 6 o successivo
- Il pacchetto NuGet
Aspose.Zip
dotnet add package Aspose.Zip
I nomi utilizzati nei campioni:Aspose.Zip
, Aspose.Zip.SevenZip
Inizio rapido: creare un archivio 7z con alcuni file
Questo esempio minimo crea un nuovo archivio 7z nella memoria, aggiunge due entrate e lo salva al disco.
// File: Program.cs
using System;
using System.IO;
using System.Text;
using Aspose.Zip.SevenZip;
class Program
{
static void Main()
{
var outputPath = "example.7z";
using (var archive = new SevenZipArchive())
{
// Add a text file from memory
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("Hello 7z from Aspose.ZIP")))
{
archive.CreateEntry("docs/readme.txt", ms);
}
// Add a file from disk
var sourceFile = "report.pdf"; // ensure this file exists
if (File.Exists(sourceFile))
{
using var fs = File.OpenRead(sourceFile);
archive.CreateEntry("reports/2025/report.pdf", fs);
}
// Save the 7z archive
using var outStream = File.Create(outputPath);
archive.Save(outStream);
}
Console.WriteLine("Saved 7z: " + Path.GetFullPath(outputPath));
}
}
- Cosa fare per notare *
SevenZipArchive
Inizia il vuoto, poi si chiamaCreateEntry(entryName, stream)
per oggetto.- I nomi di ingresso definiscono la struttura della cartella all’interno dell’archivio, come
docs/readme.txt
. - Puoi passare qualsiasi lettura
Stream
, che è utile per i dati che generate nella memoria.
Aggiungi un foglio intero
Passare un directory recursivamente, conservare la sua struttura relativa all’interno dell’archivio, e salvare come .7z
.
using System;
using System.IO;
using Aspose.Zip.SevenZip;
static class FolderTo7z
{
public static void CreateFromFolder(string sourceDir, string output7z)
{
if (!Directory.Exists(sourceDir))
throw new DirectoryNotFoundException(sourceDir);
using var archive = new SevenZipArchive();
var basePath = Path.GetFullPath(sourceDir);
foreach (var filePath in Directory.GetFiles(basePath, "*", SearchOption.AllDirectories))
{
var relPath = Path.GetRelativePath(basePath, filePath)
.Replace(Path.DirectorySeparatorChar, '/'); // normalize to forward slashes
using var fs = File.OpenRead(filePath);
archive.CreateEntry(relPath, fs);
}
using var outStream = File.Create(output7z);
archive.Save(outStream);
}
}
// Usage
// FolderTo7z.CreateFromFolder(@"C:\data\input", "bundle.7z");
• Tipi *
- Utilizzo
Path.GetRelativePath
Per mantenere pulito il layout interno della cartella. - Normalizzare i separatori di percorsi per avanzare gli scacchi per le entrate archivi costanti.
Rimuovere i file in modo sicuro
Quando si aggiungono file di grandi dimensioni, trasmetterli piuttosto che bufferare l’intero file nella memoria. File.OpenRead
se generate contenuti sul volo, scrivilo a un Stream
e passare questo flusso direttamente a CreateEntry
.
using System.IO;
using System.Text;
using Aspose.Zip.SevenZip;
static void AddGeneratedCsv(SevenZipArchive archive, string entryName)
{
// Example generator that writes CSV rows in a forward-only fashion
using var pipe = new MemoryStream();
using var writer = new StreamWriter(pipe, Encoding.UTF8, leaveOpen: true);
writer.WriteLine("id,name");
for (int i = 1; i <= 1000; i++)
writer.WriteLine($"{i},Item {i}");
writer.Flush();
pipe.Position = 0;
archive.CreateEntry(entryName, pipe);
}
Organizzare le entrate con un assistente
Per lavori più grandi, utilizzare un piccolo assistente per aggiungere file con un prefix comune. Questo mantiene la struttura dell’archivio prevedibile.
using System.IO;
using Aspose.Zip.SevenZip;
static class SevenZipHelpers
{
public static void AddFile(SevenZipArchive archive, string rootPrefix, string fullPath)
{
var relName = Path.Combine(rootPrefix, Path.GetFileName(fullPath))
.Replace(Path.DirectorySeparatorChar, '/');
using var fs = File.OpenRead(fullPath);
archive.CreateEntry(relName, fs);
}
}
Esempio finito-fino con logging e controlli di base
Questo esempio crea un archivio 7z da una lista mista di fonti. valida i percorsi e i risultati dei registri.
// File: BuildArchive.cs
using System;
using System.Collections.Generic;
using System.IO;
using Aspose.Zip.SevenZip;
public static class BuildArchive
{
public static bool Run(IEnumerable<string> paths, string output7z)
{
if (paths == null) throw new ArgumentNullException(nameof(paths));
Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(output7z)) ?? ".");
int added = 0, skipped = 0;
using var archive = new SevenZipArchive();
foreach (var p in paths)
{
if (string.IsNullOrWhiteSpace(p)) { skipped++; continue; }
if (File.Exists(p))
{
using var fs = File.OpenRead(p);
var entryName = Path.GetFileName(p);
archive.CreateEntry(entryName, fs);
Console.WriteLine("Added file: " + entryName);
added++;
}
else if (Directory.Exists(p))
{
var basePath = Path.GetFullPath(p);
foreach (var fp in Directory.GetFiles(basePath, "*", SearchOption.AllDirectories))
{
var rel = Path.GetRelativePath(basePath, fp).Replace(Path.DirectorySeparatorChar, '/');
using var fs = File.OpenRead(fp);
archive.CreateEntry(rel, fs);
Console.WriteLine("Added: " + rel);
added++;
}
}
else
{
Console.WriteLine("Skip missing: " + p);
skipped++;
}
}
using var outStream = File.Create(output7z);
archive.Save(outStream);
Console.WriteLine($"Saved: {Path.GetFullPath(output7z)}");
Console.WriteLine($"Entries added: {added}, skipped: {skipped}");
return added > 0;
}
}
// Usage sample:
// BuildArchive.Run(new [] { "README.md", "assets", "docs/spec.pdf" }, "release.7z");
Le migliori pratiche
Uso anticipato di slash per i nomi di ingressoMolti strumenti mostrano percorsi più costantemente quando le entrate vengono utilizzate
/
Come il separatore.- Dispone di flusso*Inserisci sempre i file in
using
I campioni di cui sopra garantiscono la pulizia.
- Dispone di flusso*Inserisci sempre i file in
- Validato ingresso *Verificare che i file esistono prima di aggiungerli. fornire log chiari per i percorsi scappati.
Mantenere la struttura dell’archivio pulitaDecide su un nome della cartella radice all’interno dell’archivio e si adatta a esso, come ad esempio
app/
opackage/
.Testare su piattaforme mirateVerificate che il vostro 7z si apre correttamente nelle strutture su cui i vostri utenti si affidano.
Il riassunto
È stato creato un archivio 7z programmaticamente con Aspose.ZIP per .NET, è stato aggiunto file dal disco e dalla memoria, ha conservato una struttura pulita della cartella, e ha salvato il risultato a .7z
Utilizzare questi modelli per il pacchetto di rilasciamenti, bundle e esportazioni direttamente dalle tue applicazioni C#.
More in this category
- Creare ZIP in memoria con C# e Aspose.ZIP
- Creare un Flat ZIP Archivio in C# L'estratto di ZIP Nested Efficientemente
- Crea archivi 7z (7-Zip) programmaticamente utilizzando C# .NET
- Aggiungere file o cartelle a archivi ZIP programmaticamente in C#
- Estratto di file 7z in C# C# Open Password-Protected 7zip Archivi