7z-formatet er et populært valg til kompression med høj komprimeringsgrad og distribution. S Aspose.ZIP for .NET, می‌توانید فایل‌های 7z را به‌صورت برنامه‌نویسی با استفاده از یک API ساده و مدرن ایجاد کنید. این راهنما یک مثال حداقل کاربردی را ارائه می‌دهد و الگوهای عملی را به پروژه‌های واقعی اضافه می‌کند، مانند افزودن فایل‌ها از دیسک، انتقال داده‌ها از حافظه، بررسی نام‌های ورودی و پوشه‌ها داخل فایل و مدیریت پایه خطاها.

تمام مثال‌های کد جاسازی شده‌اند و خودکفا هستند.


خلاصهٔ نیازمندی‌ها

  • .NET 6 بعدی
  • پکیج NuGet Aspose.Zip
dotnet add package Aspose.Zip

فضای نامی که در مثال‌ها استفاده می‌شود: Aspose.Zip, Aspose.Zip.SevenZip


اگر می‌خواهید یک فایل 7z با یک فایل ایجاد کنید، مراحل زیر را دنبال کنید:

این مثال حداقل یک فایل 7z جدید در حافظه ایجاد می‌کند، دو ورودی اضافه می‌کند و آن را روی دیسک ذخیره می‌نماید.

// 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 ابتدا خالی باشد، سپس فراخوانی کنید. CreateEntry(entryName, stream) در مقاله.
  • نام‌های ورودی ساختار پوشه‌ها را در فایل تعریف می‌کنند، به عنوان مثال 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(@Path.Combine("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);
    }
}

مثال از ابتدا تا انتها با ثبت‌لاگ و بررسی‌های پایه

این مثال یک فایل 7z را از یک دایرکتوری منبع ترکیبی ایجاد می‌کند.

// 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/.
  • تست در پلتفرم‌های هدف تأیید کنید که 7z شما به‌درستی در ابزارهایی که کاربران شما به آن‌ها اعتماد دارند باز می‌شود.

CV

شما یک فایل 7z را به‌صورت برنامه‌نویسی ایجاد کردید با استفاده از Aspose.ZIP for .NET, فایل‌ها از دیسک و حافظه اضافه شدند، ساختار پوشه‌های تمیز حفظ شد، و نتیجه در .7z. از این قالب‌ها برای بسته‌بندی نسخه‌ها، بسته‌ها و خروجی مستقیم از برنامه‌های C# خود استفاده کنید.

More in this category