כיצד להתמודד עם חריגות ליבת PSD ב-.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 נזרק בזמן כתיבת מסמך — למשל, כאשר ערך מחרוזת חורג מהאורך ששדה מחרוזת פסקל של PSD יכול להכיל:
try
{
image.Save("output.psd");
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}שלב 5: לבדוק חריגה פנימית
שני סוגי החריגות כוללים בנאי העוטף חריגה פנימית (משמש פנימית, למשל, כאשר שגיאת קלט/פלט מפריעה לקריאת מבנה הקובץ). בדוק את 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 על אורך מחרוזת פסקל. ערך מחרוזת (כגון שם שכבה או משאב) חורג מ-255 בייטים, המקסימום ששדה מחרוזת פסקל ב-PSD יכול לקודד. קצץ את הערך לפני השמירה.
שאלות נפוצות
האם PsdLoadException ו-PsdSaveException חולקים סוג בסיס משותף של חריגה?
לא — שניים אלו נגזרים ישירות מ-System.Exception, ולא זה מזה או ממחלקת בסיס משותפת של Aspose.PSD.
האם PsdSaveException יכול להתרחש מסיבות אחרות מלבד ערך מחרוזת ארוך?
מיקום ההשלכה המאושר בבנייה הזו של קוד פתוח הוא בדיקת אורך מחרוזת הפסקל. כשלונות קלט/פלט אחרים בזמן השמירה (לדוגמה, זרם יעד שלא ניתן לכתוב אליו) מתגלים כסוג החריגה הבסיסי .NET במקום להיות עטופים ב-PsdSaveException.
האם תפיסת Exception תופסת גם את שני סוגים אלה?
כן, מכיוון ששניהם נגזרים מ-System.Exception — אבל זיהוי הסוגים הספציפיים מאפשר לך להבחין בכשלי טעינה מכשלי שמירה.