วิธีจัดการข้อยกเว้น PSD Core ใน .NET

วิธีจัดการข้อยกเว้น PSD Core ใน .NET

Aspose.PSD FOSS สำหรับ .NET กำหนดประเภทข้อยกเว้นสองประเภท: PsdLoadException ซึ่งถูกโยนในระหว่างการพาร์สเอกสาร PSD/PSB, และ PsdSaveException ซึ่งถูกโยนในระหว่างการเขียนเอกสารนั้น ทั้งสองสืบทอดจาก System.Exception และรองรับคอนสตรกเตอร์ที่รับข้อความอย่างเดียวและคอนสตรกเตอร์ที่รับข้อความพร้อมข้อยกเว้นภายใน.

คู่มือแบบขั้นตอนต่อขั้นตอน

ขั้นตอนที่ 1: ติดตั้งแพคเกจ

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet build

ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น

using Aspose.PSD.FileFormats.Psd;

ขั้นตอนที่ 3: ดักจับความล้มเหลวระหว่างการโหลด

PsdLoadException ถูกโยนเมื่อโครงสร้างของเอกสารล้มเหลวในการตรวจสอบ — ตัวอย่างเช่น เวอร์ชัน PSD/PSB ที่ไม่รองรับ, ความยาวส่วนที่เกินขอบเขตที่กำหนดของส่วนที่บรรจุ, หรือข้อมูลสตรีมที่ถูกตัดขาด:

try
{
    using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex)
{
    Console.WriteLine($"Failed to load PSD/PSB file: {ex.Message}");
}

ขั้นตอนที่ 4: ดักจับข้อผิดพลาดขณะบันทึก

PsdSaveException ถูกโยนขณะเขียนเอกสาร — ตัวอย่างเช่น เมื่อค่าข้อความเกินความยาวที่ฟิลด์สตริง Pascal ของ PSD สามารถเก็บได้:

try
{
    image.Save("output.psd");
}
catch (PsdSaveException ex)
{
    Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}

ขั้นตอนที่ 5: ตรวจสอบข้อยกเว้นภายใน

ประเภทข้อยกเว้นทั้งสองมีคอนสตรัคเตอร์ที่ห่อหุ้มข้อยกเว้นภายใน (ใช้ภายในระบบ, ตัวอย่างเช่น เมื่อข้อผิดพลาด I/O ขัดขวางการอ่านโครงสร้างไฟล์). ตรวจสอบ InnerException เพื่อหาสาเหตุพื้นฐาน:

try
{
    using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex) when (ex.InnerException != null)
{
    Console.WriteLine($"Underlying I/O error: {ex.InnerException.Message}");
}

ปัญหาทั่วไปและวิธีแก้

PsdLoadException พร้อมข้อความเกี่ยวกับเวอร์ชันที่ไม่รองรับ. ฟิลด์เวอร์ชัน PSD ที่ระบุในไฟล์ไม่ใช่ค่า PSD มาตรฐานหรือค่า PSB สำหรับเอกสารขนาดใหญ่ ตรวจสอบว่าไฟล์เป็นเอกสาร PSD/PSB ที่แท้จริงและไม่เสียหาย.

PsdLoadException พร้อมข้อความเกี่ยวกับความยาวส่วนที่เกินขอบเขต. ฟิลด์ความยาวภายในของไฟล์ไม่สอดคล้องกับขนาดจริงของไฟล์ — ปกติแล้วนี่บ่งชี้ว่าไฟล์ถูกตัดหรือเสียหาย ไม่ใช่เวอร์ชันที่ไม่รองรับ.

PsdSaveException เกี่ยวกับความยาวของสตริง Pascal. ค่าสตริง (เช่นชื่อเลเยอร์หรือชื่อทรัพยากร) เกิน 255 ไบต์ ซึ่งเป็นขนาดสูงสุดที่ฟิลด์สตริง Pascal ของ PSD สามารถเข้ารหัสได้ ลดความยาวของค่าก่อนบันทึก.

คำถามที่พบบ่อย

PsdLoadException และ PsdSaveException มีประเภทข้อยกเว้นฐานร่วมกันหรือไม่?

ไม่ — ทั้งสองสืบตรงจาก System.Exception ไม่ได้มาจากกันหรือจากคลาสข้อยกเว้นฐาน Aspose.PSD ที่ใช้ร่วมกัน.

สามารถเกิด PsdSaveException ได้จากเหตุผลอื่นนอกจากค่าข้อความยาวหรือไม่?

จุดที่ยืนยันการโยนข้อยกเว้นในรุ่น FOSS นี้คือการตรวจสอบความยาวสตริง Pascal. ความล้มเหลวอื่น ๆ ขณะบันทึก I/O (เช่น สตรีมปลายทางที่ไม่สามารถเขียนได้) ปรากฏเป็นประเภทข้อยกเว้น .NET พื้นฐานแทนที่จะถูกห่อหุ้มด้วย PsdSaveException.

การจับ Exception จะจับประเภทเหล่านี้สองประเภทด้วยหรือไม่?

ใช่, เนื่องจากทั้งสองสืบทอดมาจาก System.Exception — แต่การจับประเภทเฉพาะทำให้คุณแยกความล้มเหลวของการโหลดออกจากความล้มเหลวของการบันทึกได้.

ดูเพิ่มเติม

 ภาษาไทย