Format 7z adalah pilihan populer untuk kompresi dan distribusi tingkat tinggi. Dengan Aspose.ZIP untuk .NET, Anda dapat membuat arkib 7-z secara programmatik menggunakan API yang sederhana dan modern. panduan ini berjalan melalui contoh kerja minimal dan menambahkan corak praktis untuk proyek nyata, seperti menambah file dari cakera, streaming data dari memori, mengontrol nama masuk dan folder di dalam arsip, dan pengelolaan kesalahan dasar.
Semua sampel kode adalah inline dan self-contained.
Persyaratan
- .NET 6 atau lebih baru
- Pakaian NuGet
Aspose.Zip
dotnet add package Aspose.Zip
Nama-nama yang digunakan dalam sampel:Aspose.Zip
, Aspose.Zip.SevenZip
Mulai Cepat: Buat Arsip 7z dengan beberapa file
Contoh minimal ini menciptakan arsip 7z baru dalam memori, menambahkan dua entri, dan menyimpannya ke cakera.
// 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));
}
}
- Apa yang harus diperhatikan *
SevenZipArchive
Mulai kosong, kemudian Anda memanggilCreateEntry(entryName, stream)
Untuk item.- Nama entri menentukan struktur folder di dalam arsip, seperti:
docs/readme.txt
. - Anda dapat membaca apa pun
Stream
, yang berguna untuk data yang Anda generasikan dalam memori.
Tambahkan pohon folder penuh
berjalan direktori secara berulang, menyimpan struktur relatifnya di dalam arkib, dan menyimpannya sebagai .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 *
- Penggunaan
Path.GetRelativePath
untuk menjaga layout folder internal bersih. - Normalisasi pemisah jalur untuk memajukan slashes untuk entri arkib konsisten.
Mengalirkan file besar dengan aman
Ketika menambahkan file besar, mengalir mereka bukannya membungkus seluruh file dalam memori. File.OpenRead
Jika Anda menghasilkan konten di fly, tulislah pada Stream
dan melewati aliran tersebut secara langsung ke 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);
}
Mengatur entri dengan pembantu
Untuk pekerjaan yang lebih besar, gunakan pembantu kecil untuk menambahkan file dengan prefix umum. ini menjaga struktur arsip Anda dapat diramalkan.
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);
}
}
Contoh akhir-ke-akhir dengan logging dan kontrol dasar
Contoh ini menciptakan arsip 7z dari daftar sumber yang bercampur. mengevaluasi jalur dan hasil log.
// 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");
Praktik Terbaik
Menggunakan slash ke depan untuk nama masukBanyak alat menampilkan jalur lebih konsisten ketika entri digunakan
/
sebagai pemisah.- Dapatkan aliranSelalu masukkan file stream ke dalam
using
Blok. sampel di atas memastikan penyimpanan bersih.
- Dapatkan aliranSelalu masukkan file stream ke dalam
- Pengenalan yang valid*Periksa file yang ada sebelum menambahkan mereka.Berikan log yang jelas untuk jalur terpisah.
Mengekalkan struktur arsip bersihPilih nama folder akar di dalam arkib dan ketik ke dalamnya, seperti:
app/
ataupackage/
.Test pada platform sasaranPastikan 7z Anda membuka dengan benar di alat-alat pengguna Anda bergantung pada.
Kesimpulannya
Anda membuat arsip 7z secara programmatik dengan Aspose.ZIP untuk .NET, menambahkan file dari cakera dan memori, menjaga struktur folder yang bersih, dan menyimpan hasilnya untuk .7z
Gunakan pola ini untuk paket rilis, bundle, dan ekspor langsung dari aplikasi C# Anda.