Formatul 7z este o alegere populară pentru compresie și distribuție de înaltă rată. cu Aspose.ZIP pentru .NET, puteți crea arhive 7Z în mod programat folosind o API simplă și modernă. Acest ghid trece printr-un exemplu de lucru minim și adaugă modele practice pentru proiecte reale, cum ar fi adăugarea fișierelor din disc, streamingul datelor din memorie, controlul numelor de intrare și a dosarelor în interiorul arhivului și gestionarea erorilor de baza.
Toate eșantionele de cod sunt inline și auto-conținute.
Prevederile
- .NET 6 sau mai târziu
- Pachetul nou
Aspose.Zip
dotnet add package Aspose.Zip
Spatiile de nume utilizate in mostre:Aspose.Zip
, Aspose.Zip.SevenZip
Start rapid: Creați un arhiv 7z cu câteva fișiere
Acest exemplu minim creează un nou arhiv 7z în memorie, adaugă două intrări și îl salvează pe disc.
// 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));
}
}
- Ce trebuie remarcat*
SevenZipArchive
începe gol, apoi suntețiCreateEntry(entryName, stream)
pe punctul respectiv.- Numele de intrare definește structura folderului din arhivă, cum ar fi:
docs/readme.txt
. - Puteți trece orice citit
Stream
, care este util pentru datele pe care le generați în memorie.
Adăugați un copac întreg
Urmăriți un director recursiv, păstrați structura sa relativă în interiorul arhivului și salvați ca .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");
„Tipuri”
- Utilizarea
Path.GetRelativePath
pentru a păstra layoutul folderului intern curat. - Normalizarea separatoarelor de cale pentru a depăși șocurile pentru intrările de arhivă consecvente.
Stream fișierele mari în siguranță
Atunci când adăugați fișiere mari, fluxându-le mai degrabă decât buffând întregul fișier în memorie. File.OpenRead
Dacă generați conținut pe zbor, scrieți-l la un Stream
și să treacă acest flux direct la 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);
}
Organizați intrări cu un ajutor
Pentru locuri de muncă mai mari, folosiți un ajutor mic pentru a adăuga fișiere cu un prefix comun.
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);
}
}
Exemplu final-to-end cu logging și controale de bază
Acest exemplu creează un arhiv 7z dintr-o listă mixtă de surse. validă căile și rezultatele jurnalelor.
// 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");
Cele mai bune practici
Utilizarea în avans a plăcilor pentru numele de intrareMulte instrumente afișează căi mai consecvent atunci când intrările sunt utilizate
/
Ca şi separatorul.- Dispunem de fluxuri*Întotdeauna păstrați fluxurile de fișiere în
using
Blocurile. eșantionele de mai sus asigură decontarea curată.
- Dispunem de fluxuri*Întotdeauna păstrați fluxurile de fișiere în
- Introducere validată*Verificați că fișierele există înainte de a le adăuga. furnizați înregistrări clare pentru căile trecute.
Să păstrați structura arhivelor curatăDecideți despre un nume de folder de rădăcină în interiorul arhivului și păstrați-l, cum ar fi:
app/
saupackage/
.Testare pe platformele țintăAsigurați-vă că 7z se deschide corect în instrumentele pe care utilizatorii dvs. se bazează.
Rezumatul
Ați creat un arhiv 7z în mod programat cu Aspose.ZIP pentru .NET, ați adăugat fișiere de pe disc și memorie, s-a păstrat o structură de folder curată și rezultatul a fost salvat .7z
Utilizați aceste modele pentru a colecta emisiuni, pachete și exporturi direct din aplicațiile dvs. C#.