Các ngoại lệ cốt lõi
Các ngoại lệ cốt lõi
Thư viện báo cáo các lỗi tải và lưu thông qua hai kiểu ngoại lệ chuyên dụng: PsdLoadException và PsdSaveException, cả hai đều kế thừa lớp chuẩn Exception.
PsdLoadException
Bị ném khi Image.Load() / PsdImage.Load() không thể phân tích đầu vào thành tài liệu PSD hoặc PSB hợp lệ.
try
{
using var image = (PsdImage)Image.Load(inputPath);
}
catch (PsdLoadException ex)
{
Console.WriteLine($"Failed to load {inputPath}: {ex.Message}");
}PsdSaveException
Bị ném khi PsdImage.Save() không thể ghi tài liệu ra.
try
{
image.Save(outputPath);
}
catch (PsdSaveException ex)
{
Console.WriteLine($"Failed to save {outputPath}: {ex.Message}");
}Hàm khởi tạo
Cả hai kiểu ngoại lệ đều có cùng cấu trúc hai hàm khởi tạo: một hàm khởi tạo chỉ nhận thông điệp, và một hàm khởi tạo nhận thông điệp cộng với ngoại lệ bên trong để bao bọc lỗi cấp thấp hơn.
throw new PsdLoadException("Unexpected end of stream while reading the PSD header.");
throw new PsdSaveException("Failed to write layer data.", innerException);Mẹo và Thực hành Tốt nhất
- Bắt
PsdLoadExceptionquanh mọi cuộc gọiImage.Load()/PsdImage.Load()xử lý đầu vào bên ngoài. - Bắt
PsdSaveExceptionquanh mọi cuộc gọiPsdImage.Save()nếu đích (đĩa, luồng) có thể không ghi được. - Cả hai kiểu đều kế thừa
Exception, vì vậy mộtcatch (Exception)bao quát hơn cũng bắt chúng — ưu tiên các kiểu cụ thể khi bạn muốn phân biệt lỗi tải và lỗi lưu.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Cách khắc phục |
|---|---|---|
PsdLoadException trên một tệp mà các công cụ khác mở bình thường | Đầu vào không phải là tài liệu PSD/PSB hợp lệ, hoặc sử dụng một tính năng mà bộ phân tích của bản dựng FOSS này không nhận ra | Xác nhận tệp là tài liệu PSD/PSB thực sự; báo cáo các tính năng không được hỗ trợ riêng biệt so với các lỗi tải |
PsdSaveException khi ghi vào luồng | Luồng đích có thể không ghi được hoặc đã bị giải phóng. | Xác nhận luồng đã mở và có thể ghi trước khi gọi Save() |
FAQ
Thư viện này có tự động thử lại sau khi xảy ra lỗi tải hoặc lưu không?
Không. PsdLoadException và PsdSaveException chỉ được phát sinh một lần và phải được người gọi xử lý; không có việc thử lại tự động.
Tôi có thể kiểm tra nguyên nhân gốc của một ngoại lệ được bao bọc không?
Có, khi có cung cấp — cả hai hàm khởi tạo đều chấp nhận một tham số innerException, có thể truy cập thông qua thuộc tính chuẩn Exception.InnerException.
API Reference Tóm tắt
| Lớp/Phương thức | Mô tả |
|---|---|
PsdLoadException(message) / PsdLoadException(message, innerException) | Bị ném khi không thể tải tài liệu |
PsdSaveException(message) / PsdSaveException(message, innerException) | Bị ném khi không thể lưu tài liệu |