Cara Menangani Pengecualian PSD Core di .NET
Aspose.PSD FOSS untuk .NET mendefinisikan dua tipe pengecualian: PsdLoadException, yang dilempar saat mem-parsing dokumen PSD/PSB, dan PsdSaveException, yang dilempar saat menulisnya. Keduanya diturunkan dari System.Exception dan mendukung konstruktor hanya pesan serta konstruktor pesan-dengan-pengecualian-internal.
Panduan Langkah demi Langkah
Langkah 1: Instal Paket
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-.NET.git
cd Aspose.PSD-FOSS-for-.NET
dotnet buildLangkah 2: Impor Kelas yang Diperlukan
using Aspose.PSD.FileFormats.Psd;Langkah 3: Tangkap Kegagalan Saat Memuat
PsdLoadException dilempar ketika struktur dokumen gagal validasi — misalnya, versi PSD/PSB yang tidak didukung, panjang bagian yang melebihi batas yang dinyatakan pada bagian yang melingkupi, atau data aliran yang terpotong:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load PSD/PSB file: {ex.Message}");
}Langkah 4: Tangkap Kegagalan Saat Menyimpan
PsdSaveException dilempar saat menulis dokumen — misalnya, ketika nilai string melebihi panjang yang dapat ditampung oleh bidang string Pascal PSD:
try
{
image.Save("output.psd");
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save PSD/PSB file: {ex.Message}");
}Langkah 5: Periksa Pengecualian Internal
Kedua tipe pengecualian memiliki konstruktor yang membungkus pengecualian internal (digunakan secara internal, misalnya, ketika kesalahan I/O menginterupsi pembacaan struktur file). Periksa InnerException untuk penyebab dasar:
try
{
using var image = PsdImage.Load("input.psd");
}
catch (PsdLoadException ex) when (ex.InnerException != null)
{
Console.WriteLine($"Underlying I/O error: {ex.InnerException.Message}");
}Masalah Umum dan Solusi
PsdLoadException dengan pesan tentang versi yang tidak didukung. Field versi PSD yang dideklarasikan dalam file bukan nilai standar PSD maupun nilai PSB untuk dokumen besar. Pastikan file tersebut adalah dokumen PSD/PSB yang asli dan tidak rusak.
PsdLoadException dengan pesan tentang panjang bagian yang melebihi batas. Field panjang internal file tidak konsisten dengan ukuran sebenarnya — ini biasanya menunjukkan file yang terpotong atau rusak, bukan varian yang tidak didukung.
PsdSaveException tentang panjang string Pascal. Nilai string (seperti nama lapisan atau sumber daya) melebihi 255 byte, maksimum yang dapat dienkode oleh field string Pascal PSD. Perpendek nilai tersebut sebelum menyimpan.
Pertanyaan yang Sering Diajukan
Apakah PsdLoadException dan PsdSaveException berbagi tipe exception dasar yang sama?
Tidak — keduanya diturunkan langsung dari System.Exception, bukan dari satu sama lain atau kelas exception dasar Aspose.PSD yang sama.
Apakah PsdSaveException dapat terjadi karena alasan selain nilai string yang panjang?
Situs lemparan yang terkonfirmasi dalam build FOSS ini adalah pemeriksaan panjang string Pascal. Kegagalan I/O saat penyimpanan lainnya (misalnya, aliran tujuan yang tidak dapat ditulisi) muncul sebagai tipe exception .NET yang mendasari alih-alih dibungkus dalam PsdSaveException.
Apakah menangkap Exception juga akan menangkap dua tipe ini?
Ya, karena keduanya diturunkan dari System.Exception — tetapi menangkap tipe spesifik memungkinkan Anda membedakan kegagalan pemuatan dari kegagalan penyimpanan.