Hoe PSD Core-excepties te behandelen in .NET
Aspose.PSD FOSS voor .NET definieert twee exceptietypen: PsdLoadException, opgeworpen tijdens het parseren van een PSD/PSB document, en PsdSaveException, opgeworpen tijdens het schrijven ervan. Beide zijn afgeleid van System.Exception en ondersteunen een constructor met alleen een bericht en een constructor met een bericht plus een inner-exceptie.
Stapsgewijze handleiding
Stap 1: Installeer het pakket
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildStap 2: Importeer de vereiste klassen
using Aspose.PSD.FileFormats.Psd;Stap 3: Vang laadtijdfouten op
PsdLoadException wordt gegooid wanneer de structuur van een document niet voldoet aan de validatie — bijvoorbeeld een niet-ondersteunde PSD/PSB-versie, een sectielengte die de gedeclareerde grens van de omvattende sectie overschrijdt, of afgekapt stream-gegevens:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load PSD/PSB file: {ex.Message}");
}Stap 4: Vang Opslag-tijd Fouten
PsdSaveException wordt gegooid tijdens het schrijven van een document — bijvoorbeeld wanneer een tekenreekswaarde de lengte overschrijdt die een PSD Pascal-tekenreeksveld kan bevatten:
try
{
image.Save("output.psd");
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}Stap 5: Inspecteer een Inner Exception
Beide exceptietypen hebben een constructor die een inner exception omsluit (intern gebruikt, bijvoorbeeld wanneer een I/O-fout het lezen van de bestandsstructuur onderbreekt). Controleer InnerException voor de onderliggende oorzaak:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex) when (ex.InnerException != null)
{
Console.WriteLine($"Underlying I/O error: {ex.InnerException.Message}");
}Veelvoorkomende problemen en oplossingen
PsdLoadException met een bericht over een niet-ondersteunde versie. Het door het bestand opgegeven PSD-versieveld is noch de standaard-PSD, noch de grote-document-PSB-waarde. Controleer of het bestand een echt, onbeschadigd PSD/PSB document is.
PsdLoadException met een bericht over een sectielengte die een grens overschrijdt. De interne lengtevvelden van het bestand komen niet overeen met de werkelijke grootte — dit duidt meestal op een ingekorte of beschadigde file in plaats van een niet-ondersteunde variant.
PsdSaveException over een Pascal-stringlengte. Een tekenreekswaarde (bijvoorbeeld een laag- of resource-naam) overschrijdt 255bytes, het maximum dat een PSD-Pascal-stringveld kan coderen. Verkort de waarde voordat u opslaat.
Veelgestelde vragen
Hebben PsdLoadException en PsdSaveException een gemeenschappelijk basistype voor uitzonderingen?
Nee — beide erven direct van System.Exception, niet van elkaar of van een gedeelde Aspose.PSD basisklasse voor uitzonderingen.
Kan PsdSaveException zich voordoen om andere redenen dan een lange tekenreekswaarde?
De bevestigde plek waar de uitzondering wordt gegooid in deze FOSS-build is de controle op de Pascal-stringlengte. Andere I/O-fouten tijdens het opslaan (bijvoorbeeld een bestemmingsstream waar niet naar geschreven kan worden) verschijnen als het onderliggende .NET-uitzonderingstype in plaats van gewrapt te worden in PsdSaveException.
Zal het opvangen van Exception ook deze twee typen vangen?
Ja, aangezien beide afstammen van System.Exception — maar het opvangen van de specifieke types laat je onderscheid maken tussen laadfouten en opslaanfouten.