Wie man PSD Core-Ausnahmen in .NET behandelt
Aspose.PSD FOSS für .NET definiert zwei Ausnahmetypen: PsdLoadException, ausgelöst beim Parsen eines PSD/PSB-Dokuments, und PsdSaveException, ausgelöst beim Schreiben eines solchen. Beide erben von System.Exception und unterstützen einen Konstruktor nur mit Nachricht sowie einen Konstruktor mit Nachricht und innerer Ausnahme.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildSchritt 2: Erforderliche Klassen importieren
using Aspose.PSD.FileFormats.Psd;Schritt 3: Ladezeitfehler abfangen
PsdLoadException wird ausgelöst, wenn die Struktur eines Dokuments die Validierung nicht besteht — zum Beispiel eine nicht unterstützte PSD/PSB-Version, eine Abschnittslänge, die die deklarierte Grenze des umschließenden Abschnitts überschreitet, oder abgeschnittene Stream-Daten:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load PSD/PSB file: {ex.Message}");
}Schritt 4: Fehler beim Speichern abfangen
PsdSaveException wird ausgelöst, während ein Dokument geschrieben wird — zum Beispiel, wenn ein Zeichenkettenwert die Länge überschreitet, die ein PSD-Pascal-String-Feld aufnehmen kann:
try
{
image.Save("output.psd");
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}Schritt 5: Eine innere Ausnahme untersuchen
Beide Ausnahmetypen besitzen einen Konstruktor, der eine innere Ausnahme kapselt (wird intern verwendet, zum Beispiel wenn ein I/O-Fehler das Lesen der Dateistruktur unterbricht). Prüfen Sie InnerException auf die zugrunde liegende Ursache:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex) when (ex.InnerException != null)
{
Console.WriteLine($"Underlying I/O error: {ex.InnerException.Message}");
}Häufige Probleme und Lösungen
PsdLoadException mit einer Meldung über eine nicht unterstützte Version. Das deklarierte PSD-Versionsfeld der Datei ist weder der Standard-PSD noch der Großdokument-PSB-Wert. Stellen Sie sicher, dass die Datei ein echtes, unverfälschtes PSD/PSB-Dokument ist.
PsdLoadException mit einer Meldung über eine Abschnittslänge, die eine Grenze überschreitet. Die internen Längenfelder der Datei stimmen nicht mit ihrer tatsächlichen Größe überein — das weist normalerweise auf eine abgeschnittene oder beschädigte Datei hin, nicht auf eine nicht unterstützte Variante.
PsdSaveException über eine Pascal-String-Länge. Ein Zeichenkettenwert (z.B. ein Ebenen- oder Ressourcenname) überschreitet 255Bytes, das Maximum, das ein PSD-Pascal-String-Feld kodieren kann. Kürzen Sie den Wert vor dem Speichern.
Häufig gestellte Fragen
Teilen PsdLoadException und PsdSaveException einen gemeinsamen Basisausnahmetyp?
Nein — beide leiten sich direkt von System.Exception ab, nicht voneinander oder von einer gemeinsamen Aspose.PSD-Basisausnahmeklasse.
Kann PsdSaveException aus anderen Gründen als einem langen Zeichenkettenwert auftreten?
Die bestätigte Auswurfstelle in diesem FOSS-Build ist die Prüfung der Pascal-String-Länge. Andere I/O-Fehler zur Speicherzeit (z.B. ein Ziel-Stream, in den nicht geschrieben werden kann) treten als der zugrunde liegende .NET-Ausnahmetyp auf, anstatt in PsdSaveException gewickelt zu werden.
Wird das Abfangen von Exception auch diese beiden Typen erfassen?
Ja, da beide von System.Exception abgeleitet sind — aber das Abfangen der spezifischen Typen lässt Sie Ladefehler von Speicherfehlern unterscheiden.