7з формат је популарна опција за компресију и дистрибуцију високог стопа. са Аспосе.ЗИП за .НЕТ, можете програматски креирати 7З архиве користећи једноставну, модерну АПИ. Овај водич пролази кроз минимални радни пример и додаје практичне обрасце за стварне пројекте, као што су додавање датотека са диска, стримирање података из меморије, контрола имена улаза и фасцикла унутар архива, и основне грешке.
Сви узорци кода су у линији и самоконтентовани.
Принципи
- .NET 6 или касније
- НУГЕТ пакете
Aspose.Zip
dotnet add package Aspose.Zip
Називни простори који се користе у узорцима:Aspose.Zip
, Aspose.Zip.SevenZip
Брзи почетак: креирање 7з архива са неколико датотека
Овај минимални пример ствара нови 7з архив у меморији, додаје два улога и чува га на диск.
// 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));
}
}
- Шта треба приметити *
SevenZipArchive
Počeo je prazan, a onda se zoveCreateEntry(entryName, stream)
po predmetu.- Имена улаза дефинишу структуру фасцикла унутар архива, као што су:
docs/readme.txt
. - Можете проћи било који читави
Stream
, што је корисно за податке које генеришете у меморији.
Додајте цео дрво фасцикла
Прошетајте директоријум рецидивирајући, сачувајте његову релативну структуру унутар архива, и сачувате као .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");
- Типс *
- Коришћење
Path.GetRelativePath
За одржавање унутрашњег распореда фасцикла. - Нормализујте сепараторе пута да напредују слагалице за конзистентне архивне улоге.
Преносе велике датотеке безбедно
Приликом додавања великих датотека, преносите их уместо да буферирате целу фајл у меморији. File.OpenRead
Ако генеришете садржај на лету, напишите га на Stream
и да прође тај ток директно на 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);
}
Организујте улазе са помоћником
За веће послове, користите мали асистент да бисте додали датотеке са уобичајеним префиксом.
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);
}
}
Крај до крај примјер са логгинг и основне провере
Овај пример ствара 7з архиву са мешовитог листе извора. то валидира путеве и резултате дневника.
// 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");
Најбоља пракса
Употреба предњих слагалица за имена улазаМноге алате приказују путеве конзистентније када улазе користе
/
Као и одвајач.- Успостављање струја*Увек уградите датотеке у
using
блокови. горе наведени узорци осигуравају чисту дистрибуцију.
- Успостављање струја*Увек уградите датотеке у
- Валидирани улазница*Проверите да ли датотеке постоје пре него што их додате.
**Држите архиву чисту*Одлучите о имену коренског фасцикла унутар архива и причврстите га, као што је
app/
илиpackage/
.- Тест на циљним платформама*Уверите се да се ваш 7з правилно отвара у алатима на које се ваши корисници ослањају.
Резюме
Програматично сте креирали 7з архиву са Aspose.ZIP за .NET, додали сте датотеке са диска и меморије, задржали чисту структуру фасцикла и сачували резултат на .7z
Користите ове шаблоне за издавање паковања, пакета и извоза директно из апликација Ц #.