7z biçimi yüksek oranlı kompresyon ve dağıtım için popüler bir seçenektir. Aspose.ZIP ile .NET, basit, modern bir API kullanılarak programlı olarak 7Z arşivleri oluşturabilirsiniz. bu rehber küçük bir çalışma örneği aracılığıyla yürür ve gerçek projeler için pratik desenler eklenir, örneğin, disk dosyaları eklemek, hafızadan aktarma verileri, giriş isimleri ve klasörleri kontrol etmek ve temel hata işleme.

Tüm kod örnekleri inline ve kendiliğinden içerir.

Ön koşullar

  • .NET 6 veya sonraki
  • NuGet paketleri Aspose.Zip
dotnet add package Aspose.Zip

Örneklerde kullanılan isim alanları:Aspose.Zip, Aspose.Zip.SevenZip

Hızlı Başlangıç: Birkaç dosya ile 7z arşivi oluşturun

Bu küçük örnek hafızada yeni bir 7z arşivi oluşturur, iki giriş ekler ve diske kaydedilir.

// 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));
    }
}
  • Neye dikkat etmeliyim *
  • SevenZipArchive boş kalmaya başlar, sonra seslenir CreateEntry(entryName, stream) Bir öğeye göre.
  • Giriş isimleri, arşiv içindeki klasör yapısını tanımlar, örneğin docs/readme.txt.
  • Herhangi bir okunanı geçebilirsiniz StreamBu, hafızada oluşturduğunuz veriler için yararlıdır.

Tüm bir ağaç ekleyin

Bir dizin tekrarlayarak yürüyün, arşiv içindeki nispeten yapısını koruyun ve .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");
  • İpuçları *
  • Kullanımı Path.GetRelativePath İç dosya düzenini temiz tutmak için.
  • Standart arşiv girişleri için yol ayrıştırıcıları ilerletmek için.

Büyük dosyaları güvenli bir şekilde aktarın

Büyük dosyaları eklediğinizde, tüm dosyasını hafızaya kaydırmak yerine bunları aktarın. File.OpenRead Eğer uçakta içeriği oluşturursanız, bir Stream ve bu akışın doğrudan 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);
}

Bir yardımcı ile giriş yapın

Daha büyük işler için, ortak bir önizleme ile dosyaları eklemek için küçük bir yardımcı kullanın. bu arşiv yapısını öngörülebilir tutar.

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);
    }
}

End-to-end örneği ile logging ve temel kontroller

Bu örnek, kaynakların karışık bir listesinden bir 7z arşivi oluşturur.

// 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");

En iyi uygulamalar

  • Giriş isimleri için ileri slashes kullanınBirçok araç, girişler kullanıldığında daha tutarlı bir şekilde yol gösterir. / Tıpkı ayrıcı gibi.

    • Sürücüsüz akımlar *Her zaman dosya akışları içine girin using Yukarıdaki örnekler temizlemeyi sağlar.
    • Geçerli girişler *Onları eklemeden önce var olan dosyaları kontrol edin. kaydırılmış yollar için açık günlükleri sağlayın.
  • Arşiv yapısını temiz tutunArşiv içindeki bir kök klasör adı üzerinde karar verin ve ona takın, örneğin app/ veya package/.

    • Hedef platformları üzerinde test*Kullanıcılarınızın güvenen araçlarda 7z’nin doğru şekilde açtığından emin olun.

Özetle

7z arşivi programlı olarak Aspose.ZIP for .NET ile oluşturdunuz, disk ve bellek dosyalarını eklediniz, temiz bir klasör yapısını koruyorsunuz ve sonuçları kaydedin. .7zBu desenleri doğrudan C# uygulamalarınızdan paket yayınları, paketleri ve ihracatları için kullanın.

More in this category