قراءة ملفات PST/OST التالفة
قراءة ملفات PST/OST التالفة
في بعض الأحيان قد لا يكون من الممكن قراءة PST/OST بسبب بعض المشكلات. على سبيل المثال، قد تكون بعض كتل البيانات تالفة. في مثل هذه الحالات، عادةً ما تظهر استثناءات عند استدعاء EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, إلخ. طرق. ولكن قد تبقى الرسائل أو المجلدات الفردية غير متضررة في التخزين.
يمكن لمستخدمي Aspose.Email العثور على معرفات العناصر بطريقة هرمية. علاوةً على ذلك، يمكنك استخراج العناصر وفقًا للمعرفات. لهذا الغرض، توفر المكتبة الطرق التالية:
- PersonalStorage.findMessages(String parentEntryId) - يجد معرفات الرسائل للمجلد.
- PersonalStorage.findSubfolders(String parentEntryId) - يجد معرفات المجلدات الفرعية للمجلد.
ملاحظة، رغم المزايا، توجد تخزينات تالفة لا يمكن قراءتها حتى باستخدام هذه الطرق.
يوضح مقطع الكود التالي كيفية استخدام هذه الطرق لقراءة ملفات PST/OST التالفة:
try (PersonalStorage pst = PersonalStorage.fromFile(fileName)) {
exploreCorruptedPst(pst, pst.getRootFolder().getEntryIdString());
}
public static void exploreCorruptedPst(PersonalStorage pst, String rootFolderId) {
Iterable<String> messageIdList = pst.findMessages(rootFolderId);
for (String messageId : messageIdList) {
try {
MapiMessage msg = pst.extractMessage(messageId);
System.out.println("- " + msg.getSubject());
} catch (Exception e) {
System.out.println("Message reading error. Entry id: " + messageId);
}
}
Iterable<String> folderIdList = pst.findSubfolders(rootFolderId);
for (String subFolderId : folderIdList) {
if (subFolderId != rootFolderId) {
try {
FolderInfo subfolder = pst.getFolderById(subFolderId);
System.out.println(subfolder.getDisplayName());
} catch (Exception e) {
System.out.println("Message reading error. Entry id: " + subFolderId);
}
exploreCorruptedPst(pst, subFolderId);
}
}
}
استخراج عناصر PST من الملفات التالفة
تتيح واجهة برمجة تطبيقات التصفح استخراج جميع عناصر PST قدر الإمكان، دون إلقاء استثناءات، حتى إذا كانت بعض بيانات الملف الأصلي تالفة.
استخدم الـ PersonalStorage(TraversalExceptionsCallback callback) المُنشئ و load(String fileName) طريقة بدلاً من الـ fromFile طريقة.
يتيح المُنشئ تعريف طريقة استدعاء خلفية.
TraversalExceptionsCallback exceptionsCallback = new TraversalExceptionsCallback() {
@Override
public void invoke(TraversalAsposeException exception, String itemId) {
/* Exception handling code. */
}
};
try (PersonalStorage pst = new PersonalStorage(exceptionsCallback)) { }
ستكون استثناءات التحميل والتصفح متاحة عبر طريقة الاستدعاء الخلفية.
إرجاع طريقة التحميل ’true’ إذا تم تحميل الملف بنجاح وكان بالإمكان مواصلة التصفح. إذا كان الملف تالفًا ولا يمكن التصفح، يتم إرجاع ‘false’.
if (currentPst.load(inputStream))
يعرض المثال البرمجي التالي كيفية تنفيذ واجهة برمجة تطبيقات تصفح ملفات PST في مشروع:
public static void main(String[] args) {
TraversalExceptionsCallback exceptionsCallback = new TraversalExceptionsCallback() {
@Override
public void invoke(TraversalAsposeException exception, String itemId) {
/* Exception handling code. */
}
};
try (PersonalStorage pst = new PersonalStorage(exceptionsCallback)) {
if (pst.load("test.pst")) {
getAllMessages(pst, pst.getRootFolder());
}
}
}
private static void getAllMessages(PersonalStorage pst, FolderInfo folder) {
for (String messageEntryId : folder.enumerateMessagesEntryId()) {
MapiMessage message = pst.extractMessage(messageEntryId);
}
for (FolderInfo subFolder : folder.getSubFolders()) {
getAllMessages(pst, subFolder);
}
}