ข้อยกเว้นหลัก
ข้อยกเว้นหลัก
ไลบรารีรายงานความล้มเหลวในการโหลดและบันทึกผ่านประเภทข้อยกเว้นสองประเภทที่กำหนดไว้: PsdLoadException และ PsdSaveException ซึ่งทั้งสองสืบทอดจากคลาสมาตรฐาน Exception.
PsdLoadException
ถูกโยนเมื่อ Image.Load() / PsdImage.Load() ไม่สามารถแยกวิเคราะห์อินพุตเป็นเอกสาร PSD หรือ PSB ที่ถูกต้องได้.
try
{
using var image = (PsdImage)Image.Load(inputPath);
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load {inputPath}: {ex.Message}");
}PsdSaveException
ถูกโยนเมื่อ PsdImage.Save() ไม่สามารถเขียนเอกสารออกได้.
try
{
image.Save(outputPath);
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save {outputPath}: {ex.Message}");
}ตัวสร้าง
ประเภทข้อยกเว้นทั้งสองมีรูปแบบคอนสตรัคเตอร์สองรูปแบบเดียวกัน: คอนสตรัคเตอร์ที่รับข้อความเท่านั้น, และคอนสตรัคเตอร์ที่รับข้อความพร้อมกับข้อยกเว้นภายในเพื่อห่อหุ้มความล้มเหลวระดับล่าง.
throw new PsdLoadException("Unexpected end of stream while reading the PSD header.");
throw new PsdSaveException("Failed to write layer data.", innerException);เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- ดักจับ
PsdLoadExceptionรอบทุกการเรียกImage.Load()/PsdImage.Load()ที่ประมวลผลข้อมูลอินพุตจากภายนอก. - ดักจับ
PsdSaveExceptionรอบทุกการเรียกPsdImage.Save()หากปลายทาง (ดิสก์, สตรีม) อาจไม่สามารถเขียนได้. - ทั้งสองประเภทสืบทอดจาก
Exceptionดังนั้นcatch (Exception)ที่กว้างขึ้นก็จะจับได้เช่นกัน — ควรใช้ประเภทเฉพาะเมื่อคุณต้องการแยกความล้มเหลวในการโหลดจากความล้มเหลวในการบันทึก.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
PsdLoadException บนไฟล์ที่เปิดได้อย่างถูกต้องในเครื่องมืออื่น | อินพุตไม่ใช่เอกสาร PSD/PSB ที่ถูกต้อง, หรือใช้ฟีเจอร์ที่ตัวพาร์เซอร์ของการสร้าง FOSS นี้ไม่รองรับ | ยืนยันว่าไฟล์เป็นเอกสาร PSD/PSB ของจริง; รายงานฟีเจอร์ที่ไม่รองรับแยกจากความล้มเหลวในการโหลด |
PsdSaveException เมื่อเขียนไปยังสตรีม | สตรีมปลายทางอาจไม่สามารถเขียนได้หรืออาจถูกทำลายไปแล้ว | ยืนยันว่าสตรีมเปิดและสามารถเขียนได้ก่อนเรียก Save() |
FAQ
ไลบรารีนี้ทำการลองใหม่โดยอัตโนมัติหลังจากการล้มเหลวในการโหลดหรือบันทึกหรือไม่?
ไม่. PsdLoadException และ PsdSaveException จะถูกยกขึ้นหนึ่งครั้งและต้องได้รับการจัดการโดยผู้เรียก; ไม่มีการลองใหม่โดยอัตโนมัติ.
ฉันสามารถตรวจสอบสาเหตุดั้งเดิมของข้อยกเว้นที่ห่อหุ้มได้หรือไม่?
ใช่, เมื่อมีการให้ค่า — ทั้งคอนสตรัคเตอร์ทั้งสองรับพารามิเตอร์ innerException ซึ่งสามารถเข้าถึงได้ผ่านคุณสมบัติมาตรฐาน Exception.InnerException.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
PsdLoadException(message) / PsdLoadException(message, innerException) | เกิดข้อยกเว้นเมื่อไม่สามารถโหลดเอกสาร |
PsdSaveException(message) / PsdSaveException(message, innerException) | เกิดข้อยกเว้นเมื่อไม่สามารถบันทึกเอกสาร |