7z-formatet er et populært valg til kompression med høj komprimeringsgrad og distribution. S Aspose.ZIP for .NET, du kan oprette 7z-filer programmatisk ved hjælp af et enkelt og moderne API. Denne guide gennemgår et funktionelt minimalt eksempel og tilføjer praktiske mønstre til reelle projekter, såsom at tilføje filer fra disk, overføre data fra hukommelsen, kontrollere indgangsnavne og mapper inden i arkivet og grundlæggende fejlhåndtering.

Alle kodeeksempler er inline og autonome.


Kravoversigt

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

Navnerum brugt i eksempler: Aspose.Zip, Aspose.Zip.SevenZip


Hvis du vil oprette en 7z-fil med én fil, skal du følge disse trin:

Dette minimale eksempel opretter en ny 7z-fil i hukommelsen, tilføjer to poster og gemmer den på disken.

// 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 bemærkes

  • SevenZipArchive start tomt, så kald CreateEntry(entryName, stream) til artiklen.
  • Inputnavne definerer mappestrukturen i filen, for eksempel docs/readme.txt.
  • Kan du overlevere enhver læsbar. Stream, hvilket er nyttigt for data, som du genererer i hukommelsen.

Tilføj hele paptræet

Gennemse kataloget rekursivt, bevar dets relative struktur i filen 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(@Path.Combine("C:", "data", "input"), "bundle.7z");

type

  • Brug Path.GetRelativePath for at opretholde en ren intern mappestruktur.
  • Normaliser stiseparatorer for omdirigeringstrim for konsistente arkivposter.

Sikker overførsel af store filer

Når du tilføjer store filer, skal du overføre dem som en stream i stedet for at gemme hele filen i hukommelsen. Det foregående grundlæggende mønster med File.OpenRead allerede overført. Hvis du genererer indhold efter eget ønske, skriv det ind i. Stream og overfør denne 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);
}

Organiser input med hjælperen

Til større opgaver skal du bruge den lille hjælper til at tilføje filer med et fælles præfiks.

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

Eksempel fra start til slut med registrering og grundlæggende kontroller

Dette eksempel opretter en 7z‑fil fra en blandet liste af kilder.

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

Gode praksisser

  • Brug skråstreger til inputnavne Mange værktøjer viser stier mere konsistent, når input anvendes. / med en separator.
  • Frigør strømme Pak altid filstrømme ind i using blokke. De foregående prøver sikrer en ren fjernelse.
  • Bekræft input Kontroller, at filerne findes, før du tilføjer dem. Giv klare logposter for udeladte stier.
  • Hold filstrukturen ren Vælg navnet på rodmappen i filen og behold det, for eksempel app/ o package/.
  • Test på målplatforme Bekræft, at din 7z åbner korrekt i de værktøjer, som dine brugere stoler på.

CV

Du har oprettet en 7z‑fil programmatisk ved hjælp af Aspose.ZIP for .NET, blev filer tilføjet fra disk og hukommelse, den rene mappestruktur blev bevaret, og resultatet blev gemt i .7z. Brug disse mønstre til at pakke versioner, pakker og eksporter direkte fra dine C#-applikationer.

More in this category