7z-muoto on suosittu valinta korkean vertailun kompressiolle ja jakelulle. Aspose.ZIP for .NET avulla voit luoda 7Z-tiedostoja ohjelmattisesti yksinkertaisen, nykyaikaisen API: n avulla. Tämä opas kulkee minimaalisen työn esimerkin läpi ja lisää käytännön malleja todellisille projekteille, kuten tiedostojen lisääminen levystä, tiedon virtaaminen muistiinpanosta, sisäänkäyntien nimet ja tiedostot arkiston sisällä ja perusvirheen käsittely.

Kaikki koodin näytteet ovat inline ja itsekohtaisia.

edellytykset

  • .NET 6 tai uudempi
  • NuGet paketti Aspose.Zip
dotnet add package Aspose.Zip

Näytteissä käytetyt nimikkeet:Aspose.Zip, Aspose.Zip.SevenZip

Nopea käynnistys: luo 7z arkisto muutaman tiedoston kanssa

Tämä vähäinen esimerkki luo uuden 7z-arkiston muistiin, lisää kaksi kirjoitusta ja tallentaa sen levylle.

// 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));
    }
}
  • Mitä pitää huomata*
  • SevenZipArchive alkaa tyhjä, sitten soitat CreateEntry(entryName, stream) kohdan mukaan.
  • Sisällön nimet määrittelevät tiedostokohdan rakenteen arkiston sisällä, kuten docs/readme.txt.
  • Voit lukea mitä tahansa Stream, joka on hyödyllinen tietoihin, joita luot muistiin.

Lisää koko laatikon puu

Käynnistä rekisteri uudelleen, säilytä sen suhteellinen rakenne arkiston sisällä, ja tallentaa .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");
  • Vinkkejä *
  • Käytä Path.GetRelativePath Pidä sisäinen laatikko puhtaana.
  • Normalisoida reitin eristäjät edetä hyppyjä johdonmukaisten arkisto-osoitteiden.

Suorita suuria tiedostoja turvallisesti

Kun lisät suuria tiedostoja, virtaa ne sen sijaan, että buffering koko tiedoston muisti. File.OpenRead jo virtaa.Jos luot sisältöä lentokoneella, kirjoita se Stream ja siirtää tämä virta suoraan 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);
}

Järjestä sisäänkäynti apulaisen kanssa

Suuremmat työpaikat, käytä pieni avustaja lisätä tiedostoja yhteinen etu. Tämä pitää arkiston rakenne ennustettavissa.

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

Lopullinen esimerkki logging ja perus tarkastukset

Tämä esimerkki luo 7z arkiston sekoitetusta lähteiden luettelosta. se vahvistaa polkuja ja arkistot tuloksia.

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

Parhaat käytännöt

  • ** Käytä etukäteen laskuja sisäänkirjautumisten nimille**Monet työkalut näyttävät reittejä johdonmukaisemmin, kun kirjoituksia käytetään / Niin kuin erottaja.

    • Käytettävissä virrat*Valitse aina tiedostojen virtaukset using Korkeat näytteet takaavat puhtaan käytön.
    • Hyväksyttävä sisäänpääsy*Tarkista, että tiedostot ovat olemassa ennen niiden lisäämistä. Tarjoa selkeät arkistot kaatuneille reiteille.
    • Pidä arkiston rakenne puhtaana*Valitse arkiston sisällä oleva root-laatikon nimi ja liity siihen, kuten app/ tai package/.
  • **Testit kohdistuvilla alustoilla*Varmista, että 7z avautuu oikein työkaluissa käyttäjät luottavat.

Yhteenveto

Olet luonut 7z-arkiston ohjelmattisesti Aspose.ZIP for .NET, lisännyt tiedostoja levystä ja muistiin, säilyttänyt puhtaan tiedoston rakenteen ja tallentanut tuloksen .7zKäytä näitä malleja pakettien julkaisuihin, paketteihin ja vientiin suoraan C#-sovelluksistasi.

More in this category