עם 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