فرمت 7Z یک انتخاب محبوب برای فشرده سازی و توزیع با نرخ بالا است. با Aspose.ZIP برای .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(@"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 شما به درستی در ابزارهایی که کاربران شما بر آن تکیه می کنند باز می شود.

خلاصه

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

More in this category