แตกเนื้อหา CSPROJ จาก ZIP ใน .NET
ใช้ Aspose.ZIP for .NET เพื่อเปิด ZIP archive ตรวจสอบ entry และกู้คืนเฉพาะไฟล์ CSPROJ ที่แอปพลิเคชัน C# ต้องใช้ ในหน้านี้การแตกไฟล์หมายถึงการค้นหารายการนามสกุล.csproj ภายใน ZIP container แล้วเขียนไปยัง destination ที่ควบคุมได้ Aspose.ZIP กู้คืนไฟล์ที่เก็บอยู่ใน archive แต่ไม่ได้ตีความหรือแปลงเนื้อหาภายในของไฟล์นั้นการแตกเฉพาะรายการที่เลือกมีประโยชน์สำหรับไฟล์อัปโหลดจากนักพัฒนา build package การรีวิวโค้ด และ workflow CI/CD แอปพลิเคชันสามารถ filter ตาม extension, ข้ามไฟล์ที่ไม่เกี่ยวข้อง และกำหนดกฎเรื่องชื่อไฟล์ซ้ำหรือ output path แทนการแตกทุกอย่างออกมา
วิธีแตกไฟล์ CSPROJ จาก ZIP ด้วย C#
ติดตั้ง
Aspose.ZIP package for .NET
และ reference namespace Aspose.Zip API เปิดให้ดู archive metadata ก่อนเขียนไฟล์ แอปพลิเคชันจึงตรวจสอบ ArchiveEntry.Name, ArchiveEntry.IsDirectory และ ArchiveEntry.UncompressedSize ได้ก่อนบันทึกไฟล์ซอร์สโค้ด
Package Manager Console Command
PM> Install-Package Aspose.Zip
หลังติดตั้งแล้ว ให้เปิด ZIP ด้วย Archive, enumerate Archive.Entries, เลือก non-directory entries ที่ชื่อลงท้ายด้วย .csproj แล้วเรียก ArchiveEntry.Extract สำหรับ destination ที่ผ่านการอนุมัติ ตัวอย่างใช้เฉพาะชื่อไฟล์สุดท้ายเพื่อไม่ให้ path ใน archive เขียนออกนอก target folder
ขั้นตอนการแตกไฟล์ CSPROJ ใน C#
- กำหนด source ZIP path และสร้าง output directory ที่แยกไว้
- เปิด input ด้วย
Archiveclass - iterate ผ่าน
Archive.Entriesแทนการแตกทั้งแพ็กเกจ - ข้าม directory entry และเลือกชื่อที่ลงท้ายด้วย
.csproj - ลด path ที่อนุมัติให้เหลือ destination filename ที่ปลอดภัย
- แตก entry ที่เลือกด้วย
ArchiveEntry.Extract - ใช้กฎ collision, size, logging และ cleanup ตามที่แอปพลิเคชันต้องการ
ข้อกำหนดของระบบ
ก่อนรันตัวอย่าง ตรวจสอบว่า environment มีรายการต่อไปนี้:
- runtime .NET ที่รองรับบน Windows, Linux หรือ macOS
- Visual Studio, JetBrains Rider, Visual Studio Code หรือ C# IDE อื่น
- ติดตั้ง Aspose.ZIP for .NET ผ่าน NuGet หรือ reference เป็น assembly
- สิทธิ์อ่าน source ZIP และสิทธิ์เขียน destination directory
- กำหนด limit ด้านขนาด เวลาประมวลผล และ temporary storage สำหรับ archive ที่ไม่น่าเชื่อถือ
ตัวอย่าง C#: แตกไฟล์ CSPROJ ที่เลือกจาก ZIP
โค้ดด้านล่างเปิด ZIP package, filter entry ตามนามสกุล .csproj และเขียนไฟล์ที่ตรงเงื่อนไขไปยัง output directory เดียว การ flatten path ช่วยให้ตัวอย่างกระชับและป้องกัน parent-directory segment จากการควบคุม destination
แตกไฟล์ CSPROJ จาก ZIP - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-csproj");
string[] allowedExtensions = { ".csproj" };
const ulong MaxEntrySize = 100UL * 1024 * 1024;
Directory.CreateDirectory(outputDirectory);
using (var archive = new Archive(archivePath))
{
foreach (ArchiveEntry entry in archive.Entries)
{
if (entry.IsDirectory) continue;
string fileName = Path.GetFileName(entry.Name);
if (string.IsNullOrWhiteSpace(fileName)) continue;
string extension = Path.GetExtension(fileName);
if (!Array.Exists(
allowedExtensions,
value => string.Equals(value, extension, StringComparison.OrdinalIgnoreCase)))
{
continue;
}
if (entry.UncompressedSize > MaxEntrySize)
{
throw new InvalidDataException(
$"รายการ '{fileName}' มีขนาดเกินขีดจำกัดการแตกไฟล์ 100 MB");
}
string destinationPath = Path.Combine(outputDirectory, fileName);
entry.Extract(destinationPath);
}
}
{{i18n.implementation-notes.title}}
- นามสกุล
.csprojเป็นเพียงตัวกรองเบื้องต้น หาก workflow ต้องอ่านเนื้อหาของ CSPROJ ให้ตรวจสอบด้วย parser หรือ viewer ที่รองรับรูปแบบนั้นหลังจากแตกไฟล์แล้ว - ใช้
Path.GetFileNameหรือกฎ path sanitization ที่เทียบเท่าเมื่อไม่ต้องการรักษาโฟลเดอร์จาก archive - สำหรับแพ็กเกจขนาดใหญ่ ให้กำหนด limit ต่อ entry และ limit รวม เพื่อป้องกันการใช้ disk หรือ memory เกินควบคุม
- อย่ารันหรือ build โค้ดที่แตกออกมาโดยอัตโนมัติหากยังไม่ได้ตรวจสอบความน่าเชื่อถือ ให้ถือว่าเป็น input จากภายนอก
{{i18n.security-privacy.title}}
{{i18n.security-privacy}}FAQ การแตกไฟล์ CSPROJ
Aspose.ZIP แปลงเนื้อหา CSPROJ ระหว่างแตกไฟล์หรือไม่
ไม่ Aspose.ZIP กู้คืนไฟล์ CSPROJ จาก ZIP container เท่านั้น การอ่านหรือแปลงเนื้อหา CSPROJ ต้องใช้ API ที่รองรับรูปแบบนั้น
สามารถแตกเฉพาะไฟล์ CSPROJ จาก ZIP ได้หรือไม่
ได้ ให้ enumerate `Archive.Entries` แล้วเลือก entry ที่มีนามสกุล `.csproj` ก่อนเรียก `ArchiveEntry.Extract`
ควรรักษา folder structure เดิมจาก ZIP หรือไม่
ขึ้นอยู่กับ workflow หากต้องการความปลอดภัยและ output แบบแบน ให้ใช้ชื่อไฟล์สุดท้ายเท่านั้น หากต้องรักษาโฟลเดอร์เดิม ต้อง validate path ทุกส่วนก่อนเขียนไฟล์
ตัวอย่างนี้ใช้กับ archive format อื่นได้หรือไม่
pattern ด้านการ filter และการ validate ใช้ซ้ำได้ แต่ class และ options ต้องตรงกับ container จริง เช่น ZIP, 7Z, RAR, TAR หรือ CAB
คู่มือการแตกไฟล์ซอร์สโค้ดที่เกี่ยวข้อง
ดูหน้าคู่มือ C# สำหรับรูปแบบโปรเจกต์และโค้ดที่มักเก็บใน archive