مع Aspose.ZIP for .NET، يمكنك إنشاء ملفات 7z برامج باستخدام API بسيطة وحديثة.هذا الدليل يمشي من خلال نموذج عمل صغير ويضيف أنماط عملية للمشاريع الحقيقية، مثل إضافة الملفات من القرص، وتدفق البيانات من الذاكرة، والسيطرة على أسماء الإدخالات والمجلدات داخل الأرشيف، ومعالجة الأخطاء الأساسية.
جميع عينات الرمز هي داخلية ومحتوية ذاتية.
المتطلبات
- .NET 6 أو أحدث
- حزمة NuGet
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 الخاص بك يفتح بشكل صحيح في الأدوات التي يعتمد عليها مستخدميك.
ملخص
قمت بإنشاء ملف 7z برمجيًا باستخدام Aspose.ZIP for .NET ، وإضافة ملفات من القرص والذاكرة ، والحفاظ على بنية مجلد نظيفة ، وحفظ النتيجة إلى .7z
استخدم هذه النماذج لإصدارات التعبئة والتغليف والتصدير مباشرة من تطبيقات C# الخاصة بك.