Formatet 7z er et populært valg for kompression og distribution i høj grad. Med Aspose.ZIP for .NET kan du programmeret oprette 7Z-arkiver ved hjælp af en simpel, moderne API. Denne guide går gennem et minimalt arbejdsmønster og tilføjer praktiske mønstre til virkelige projekter, såsom tilføjelse af filer fra disk, streaming data fra hukommelse, styring af indtægtsnavn og mapper inde i arkivet, og grundlæggende fejlbehandling.
Alle kodeksempler er inline og selvindholdet.
Forudsætninger
- .NET 6 eller senere
- NuGet pakke
Aspose.Zip
dotnet add package Aspose.Zip
Navneområder anvendt i prøverne:Aspose.Zip
, Aspose.Zip.SevenZip
Hurtig start: Oprette en 7z-arkiv med et par filer
Dette minimale eksempel skaber et nyt 7z-arkiv i hukommelsen, tilføjer to indtægter og gemmer det til disk.
// 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));
}
}
- Hvad skal man bemærke *
SevenZipArchive
Det begynder tomt, så ringer duCreateEntry(entryName, stream)
af elementer.- Entry-navn definerer mappestrukturen inde i arkivet, som f.eks.
docs/readme.txt
. - Du kan læse alle læsbare
Stream
, som er nyttigt for de data, du genererer i hukommelsen.
Tilføj et hele folder træ
Gå en katalog tilbagevendende, bevare dens relative struktur inde i arkivet, og gem som .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");
»Tips«
- Brug af
Path.GetRelativePath
For at sikre, at den interne layout er ren. - Normalisere vej separatorer til at fremme slages for konsekvente arkivindtægter.
Stream store filer sikkert
Når du tilføjer store filer, strømmer de i stedet for at buffere hele filen i hukommelsen. File.OpenRead
Hvis du genererer indhold på flyet, skal du skrive det til en Stream
og gennemgår den strøm direkte til 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);
}
Indtastning med en assistent
For større job, brug en lille hjælp til at tilføje filer med en almindelig præfix. Dette holder din arkivstruktur forudsigelig.
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);
}
}
End-to-end eksempel med logging og grundlæggende kontroller
Dette eksempel skaber et 7z-arkiv fra en blandet liste over kilder. Det validerer veje og logs resultater.
// 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");
Bedste praksis
Anvendelse i forvejen slashes for indtastning navnMange værktøjer viser veje mere konsekvent, når input bruges
/
Det er som separatoren.- Tilgængelige strømme*Altid blande filstrømme i
using
Blokkene. de ovennævnte prøver sikrer ren distribution.
- Tilgængelige strømme*Altid blande filstrømme i
- Godkendte indtægter *Kontrollér, at filer eksisterer, før du tilføjer dem. Giv klare loger for skiftet veje.
- Hold arkivstrukturen ren*Beslut om et root mappe navn inde i arkivet og tryk på det, såsom
app/
ellerpackage/
.
- Hold arkivstrukturen ren*Beslut om et root mappe navn inde i arkivet og tryk på det, såsom
Test på målplatformeSørg for, at din 7z åbner korrekt i de værktøjer, dine brugere stoler på.
Samlinger
Du har skabt et 7z-arkiv programmeret med Aspose.ZIP for .NET, tilføjet filer fra disk og hukommelse, bevaret en ren mappestruktur, og gemt resultatet til .7z
Brug disse mønstre til at pakke udgivelser, pakker og eksporter direkte fra dine C#-applikationer.