7z biçimi yüksek oranlı kompresyon ve dağıtım için popüler bir seçenektir. Aspose.ZIP ile .NET, basit, modern bir API kullanılarak programlı olarak 7Z arşivleri oluşturabilirsiniz. bu rehber küçük bir çalışma örneği aracılığıyla yürür ve gerçek projeler için pratik desenler eklenir, örneğin, disk dosyaları eklemek, hafızadan aktarma verileri, giriş isimleri ve klasörleri kontrol etmek ve temel hata işleme.
Tüm kod örnekleri inline ve kendiliğinden içerir.
Ön koşullar
- .NET 6 veya sonraki
- NuGet paketleri
Aspose.Zip
dotnet add package Aspose.Zip
Örneklerde kullanılan isim alanları:Aspose.Zip
, Aspose.Zip.SevenZip
Hızlı Başlangıç: Birkaç dosya ile 7z arşivi oluşturun
Bu küçük örnek hafızada yeni bir 7z arşivi oluşturur, iki giriş ekler ve diske kaydedilir.
// 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));
}
}
- Neye dikkat etmeliyim *
SevenZipArchive
boş kalmaya başlar, sonra seslenirCreateEntry(entryName, stream)
Bir öğeye göre.- Giriş isimleri, arşiv içindeki klasör yapısını tanımlar, örneğin
docs/readme.txt
. - Herhangi bir okunanı geçebilirsiniz
Stream
Bu, hafızada oluşturduğunuz veriler için yararlıdır.
Tüm bir ağaç ekleyin
Bir dizin tekrarlayarak yürüyün, arşiv içindeki nispeten yapısını koruyun ve .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");
- İpuçları *
- Kullanımı
Path.GetRelativePath
İç dosya düzenini temiz tutmak için. - Standart arşiv girişleri için yol ayrıştırıcıları ilerletmek için.
Büyük dosyaları güvenli bir şekilde aktarın
Büyük dosyaları eklediğinizde, tüm dosyasını hafızaya kaydırmak yerine bunları aktarın. File.OpenRead
Eğer uçakta içeriği oluşturursanız, bir Stream
ve bu akışın doğrudan 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);
}
Bir yardımcı ile giriş yapın
Daha büyük işler için, ortak bir önizleme ile dosyaları eklemek için küçük bir yardımcı kullanın. bu arşiv yapısını öngörülebilir tutar.
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 örneği ile logging ve temel kontroller
Bu örnek, kaynakların karışık bir listesinden bir 7z arşivi oluşturur.
// 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");
En iyi uygulamalar
Giriş isimleri için ileri slashes kullanınBirçok araç, girişler kullanıldığında daha tutarlı bir şekilde yol gösterir.
/
Tıpkı ayrıcı gibi.- Sürücüsüz akımlar *Her zaman dosya akışları içine girin
using
Yukarıdaki örnekler temizlemeyi sağlar.
- Sürücüsüz akımlar *Her zaman dosya akışları içine girin
- Geçerli girişler *Onları eklemeden önce var olan dosyaları kontrol edin. kaydırılmış yollar için açık günlükleri sağlayın.
Arşiv yapısını temiz tutunArşiv içindeki bir kök klasör adı üzerinde karar verin ve ona takın, örneğin
app/
veyapackage/
.- Hedef platformları üzerinde test*Kullanıcılarınızın güvenen araçlarda 7z’nin doğru şekilde açtığından emin olun.
Özetle
7z arşivi programlı olarak Aspose.ZIP for .NET ile oluşturdunuz, disk ve bellek dosyalarını eklediniz, temiz bir klasör yapısını koruyorsunuz ve sonuçları kaydedin. .7z
Bu desenleri doğrudan C# uygulamalarınızdan paket yayınları, paketleri ve ihracatları için kullanın.