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 memanggil CreateEntry(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.
    • 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/ atau package/.

  • 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 .7zGunakan pola ini untuk paket rilis, bundle, dan ekspor langsung dari aplikasi C# Anda.

More in this category