עם Aspose.ZIP עבור .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 עבור .NET, הוסיפה קבצים מהדיסק והזיכרון, שמרה על מבנה תיקיה נקי, ושמרה את התוצאה .7z
השתמש בדפוסים אלה כדי לאסוף שחרורים, חבילות, ויצוא ישירות מהיישומים שלך C#.