Formatet 7z er et populært valg for kompression og distribution i høj grad. Med Aspose.ZIP for .NET kan du programmeret oprette 7Z-arkiver ved hjælp af en simpel, moderne API. Denne guide går gennem et minimalt arbejdsmønster og tilføjer praktiske mønstre til virkelige projekter, såsom tilføjelse af filer fra disk, streaming data fra hukommelse, styring af indtægtsnavn og mapper inde i arkivet, og grundlæggende fejlbehandling.

Alle kodeksempler er inline og selvindholdet.

Forudsætninger

  • .NET 6 eller senere
  • NuGet pakke Aspose.Zip
dotnet add package Aspose.Zip

Navneområder anvendt i prøverne:Aspose.Zip, Aspose.Zip.SevenZip

Hurtig start: Oprette en 7z-arkiv med et par filer

Dette minimale eksempel skaber et nyt 7z-arkiv i hukommelsen, tilføjer to indtægter og gemmer det til disk.

// 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));
    }
}
  • Hvad skal man bemærke *
  • SevenZipArchive Det begynder tomt, så ringer du CreateEntry(entryName, stream) af elementer.
  • Entry-navn definerer mappestrukturen inde i arkivet, som f.eks. docs/readme.txt.
  • Du kan læse alle læsbare Stream, som er nyttigt for de data, du genererer i hukommelsen.

Tilføj et hele folder træ

Gå en katalog tilbagevendende, bevare dens relative struktur inde i arkivet, og gem som .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");

»Tips«

  • Brug af Path.GetRelativePath For at sikre, at den interne layout er ren.
  • Normalisere vej separatorer til at fremme slages for konsekvente arkivindtægter.

Stream store filer sikkert

Når du tilføjer store filer, strømmer de i stedet for at buffere hele filen i hukommelsen. File.OpenRead Hvis du genererer indhold på flyet, skal du skrive det til en Stream og gennemgår den strøm direkte til 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);
}

Indtastning med en assistent

For større job, brug en lille hjælp til at tilføje filer med en almindelig præfix. Dette holder din arkivstruktur forudsigelig.

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 eksempel med logging og grundlæggende kontroller

Dette eksempel skaber et 7z-arkiv fra en blandet liste over kilder. Det validerer veje og logs resultater.

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

Bedste praksis

  • Anvendelse i forvejen slashes for indtastning navnMange værktøjer viser veje mere konsekvent, når input bruges / Det er som separatoren.

    • Tilgængelige strømme*Altid blande filstrømme i using Blokkene. de ovennævnte prøver sikrer ren distribution.
    • Godkendte indtægter *Kontrollér, at filer eksisterer, før du tilføjer dem. Giv klare loger for skiftet veje.
    • Hold arkivstrukturen ren*Beslut om et root mappe navn inde i arkivet og tryk på det, såsom app/ eller package/.
  • Test på målplatformeSørg for, at din 7z åbner korrekt i de værktøjer, dine brugere stoler på.

Samlinger

Du har skabt et 7z-arkiv programmeret med Aspose.ZIP for .NET, tilføjet filer fra disk og hukommelse, bevaret en ren mappestruktur, og gemt resultatet til .7zBrug disse mønstre til at pakke udgivelser, pakker og eksporter direkte fra dine C#-applikationer.

More in this category