7z-formatet er et populært valg til kompression med høj komprimeringsgrad og distribution. S Aspose.ZIP for .NET, du kan oprette 7z-filer programmatisk ved hjælp af et enkelt og moderne API. Denne guide gennemgår et funktionelt minimalt eksempel og tilføjer praktiske mønstre til reelle projekter, såsom at tilføje filer fra disk, overføre data fra hukommelsen, kontrollere indgangsnavne og mapper inden i arkivet og grundlæggende fejlhåndtering.
Alle kodeeksempler er inline og autonome.
Kravoversigt
- .NET 6 eller nyere
- NuGet-pakke
Aspose.Zip
dotnet add package Aspose.Zip
Navnerum brugt i eksempler: Aspose.Zip, Aspose.Zip.SevenZip
Hvis du vil oprette en 7z-fil med én fil, skal du følge disse trin:
Dette minimale eksempel opretter en ny 7z-fil i hukommelsen, tilføjer to poster og gemmer den på disken.
// 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 bemærkes
SevenZipArchivestart tomt, så kaldCreateEntry(entryName, stream)til artiklen.- Inputnavne definerer mappestrukturen i filen, for eksempel
docs/readme.txt. - Kan du overlevere enhver læsbar.
Stream, hvilket er nyttigt for data, som du genererer i hukommelsen.
Tilføj hele paptræet
Gennemse kataloget rekursivt, bevar dets relative struktur i filen 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(@Path.Combine("C:", "data", "input"), "bundle.7z");
type
- Brug
Path.GetRelativePathfor at opretholde en ren intern mappestruktur. - Normaliser stiseparatorer for omdirigeringstrim for konsistente arkivposter.
Sikker overførsel af store filer
Når du tilføjer store filer, skal du overføre dem som en stream i stedet for at gemme hele filen i hukommelsen. Det foregående grundlæggende mønster med File.OpenRead allerede overført. Hvis du genererer indhold efter eget ønske, skriv det ind i. Stream og overfør denne 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);
}
Organiser input med hjælperen
Til større opgaver skal du bruge den lille hjælper til at tilføje filer med et fælles præfiks.
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);
}
}
Eksempel fra start til slut med registrering og grundlæggende kontroller
Dette eksempel opretter en 7z‑fil fra en blandet liste af kilder.
// 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");
Gode praksisser
- Brug skråstreger til inputnavne Mange værktøjer viser stier mere konsistent, når input anvendes.
/med en separator. - Frigør strømme Pak altid filstrømme ind i
usingblokke. De foregående prøver sikrer en ren fjernelse. - Bekræft input Kontroller, at filerne findes, før du tilføjer dem. Giv klare logposter for udeladte stier.
- Hold filstrukturen ren Vælg navnet på rodmappen i filen og behold det, for eksempel
app/opackage/. - Test på målplatforme Bekræft, at din 7z åbner korrekt i de værktøjer, som dine brugere stoler på.
CV
Du har oprettet en 7z‑fil programmatisk ved hjælp af Aspose.ZIP for .NET, blev filer tilføjet fra disk og hukommelse, den rene mappestruktur blev bevaret, og resultatet blev gemt i .7z. Brug disse mønstre til at pakke versioner, pakker og eksporter direkte fra dine C#-applikationer.