7z 형식은 높은 비율의 압축 및 배포를위한 인기있는 선택입니다. Aspose.ZIP for .NET, 당신은 간단하고 현대 API를 사용하여 프로그래밍으로 7Z 아카이브를 만들 수 있습니다.이 가이드는 최소한의 작업 예를 통해 걸어 가서 실제 프로젝트에 대한 실용적인 패턴을 추가합니다.

모든 코드 샘플은 인라인 및 자체 콘텐츠입니다.

원칙

  • .NET 6 또는 이후
  • 포장 패키지 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가 올바르게 열리는지 확인하십시오.

요약

당신은 .NET을위한 **Aspose.ZIP를 사용하여 7z 아카이브를 프로그래밍으로 만들었고, 디스크와 메모리에서 파일을 추가하고, 깨끗한 폴더 구조를 유지하고 결과를 저장했습니다. .7z이 패턴을 사용하여 C# 응용 프로그램에서 직접 발행, 패키지 및 수출을 할 수 있습니다.

More in this category