Πώς να Διαχειριστείτε τις Εξαιρέσεις PSD Core στο .NET
Aspose.PSD FOSS για .NET ορίζει δύο τύπους εξαιρέσεων: PsdLoadException, που ρίχνεται κατά την ανάλυση ενός εγγράφου PSD/PSB, και PsdSaveException, που ρίχνεται κατά τη συγγραφή ενός. Και οι δύο κληρονομούν από το System.Exception και υποστηρίζουν έναν message-only constructor και έναν message-plus-inner-exception constructor.
Οδηγός βήμα προς βήμα
Βήμα 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 Pascal string:
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 byte, το μέγιστο που μπορεί να κωδικοποιήσει ένα πεδίο Pascal string του PSD. Συντομεύστε την τιμή πριν την αποθήκευση.
Συχνές Ερωτήσεις
Μοιράζονται τα PsdLoadException και PsdSaveException έναν κοινό βασικό τύπο εξαίρεσης;
Όχι — και τα δύο προέρχονται άμεσα από το System.Exception, όχι το ένα από το άλλο ή από μια κοινή κλάση βάσης Aspose.PSD.
Μπορεί το PsdSaveException να συμβεί για λόγους διαφορετικούς από μια μακριά τιμή συμβολοσειράς;
Η επιβεβαιωμένη θέση ρίψης σε αυτήν την έκδοση FOSS είναι ο έλεγχος μήκους συμβολοσειράς Pascal. Άλλες αποτυχίες I/O κατά την αποθήκευση (π.χ., μια ροή προορισμού που δεν μπορεί να γραφτεί) εμφανίζονται ως ο υποκείμενος τύπος εξαίρεσης .NET αντί να τυλίγονται στο PsdSaveException.
Θα πιάσει η σύλληψη του Exception και αυτούς τους δύο τύπους;
Ναι, επειδή και τα δύο προέρχονται από System.Exception — αλλά η σύλληψη των συγκεκριμένων τύπων σας επιτρέπει να διακρίνετε αποτυχίες φόρτωσης από αποτυχίες αποθήκευσης.