قراءة ملفات PST/OST التالفة

معالجة ملفات التخزين التالفة

في بعض الأحيان قد لا يكون من الممكن قراءة PST/OST بسبب بعض المشكلات. على سبيل المثال، قد تكون بعض كتل البيانات تالفة. في مثل هذه الحالات، عادةً ما تظهر استثناءات عند استدعاء الـ EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, إلخ. طرق. ولكن قد تبقى الرسائل أو المجلدات الفردية غير متضررة في التخزين.

الطرق للعثور على معرفات العنصر

تسمح الطرق التالية بالعثور على معرفات العناصر بطريقة هرمية.

يمكن استخدام المعرفات التي تم الحصول عليها باستخدام هذه الطرق لاسترجاع الرسائل والمجلدات.

ملاحظة: يجب ملاحظة أنه على الرغم من مزاياه، هناك مخازن تالفة لا يمكن قراءتها حتى باستخدام هذه الطرق.

تنقل ملفات PST

توضح عينة الشيفرة التالية تنقل ملف PST واستخراج المجلدات والرسائل. للحصول على قائمة المعرفات استخدم طريقتي FindMessages و FindSubfolders. ثم يُمرَّر المعرف إلى الـ ExtractMessage أو GetFolderById طريقة لاستخراج العناصر.

using (var pst = PersonalStorage.FromFile(fileName))
{
    ExploreCorruptedPst(pst, pst.RootFolder.EntryIdString);
}

public static void ExploreCorruptedPst(PersonalStorage pst, string rootFolderId)
{
    var messageIdList = pst.FindMessages(rootFolderId);

    foreach (var messageId in messageIdList)
    {
        try
        {
            var msg = pst.ExtractMessage(messageId);
            Console.WriteLine( "- " + msg.Subject);
        }
        catch
        {
            Console.WriteLine("Message reading error. Entry id: " + messageId);
        }
    }

    var folderIdList = pst.FindSubfolders(rootFolderId);

    foreach (var subFolderId in folderIdList)
    {
        if (subFolderId != rootFolderId)
        {
            try
            {
                FolderInfo subfolder = pst.GetFolderById(subFolderId);
                Console.WriteLine(subfolder.DisplayName);
            }
            catch
            {
                Console.WriteLine("Message reading error. Entry id: " + subFolderId);
            }

            ExplodeCorruptedPst(pst, subFolderId);
        }
    }
}