Bozuk PST/OST Dosyalarını Okuyun

Bozuk Depolama Dosyalarının İşlenmesi

Bazen bazı sorunlar nedeniyle bir PST/OST dosyasını okumak mümkün olmayabilir. Örneğin, bazı veri blokları bozuk olabilir. Böyle durumlarda, genellikle şu yöntem çağrıldığında istisnalar ortaya çıkar: EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, vb. yöntemler. Ancak bireysel mesajlar veya klasörler depolamada zarar görmemiş olabilir.

Öğe Tanımlayıcılarını Bulma Yöntemleri

Aşağıdaki yöntemler, öğe tanımlayıcılarını hiyerarşik bir şekilde bulmanıza olanak tanır.

Yöntemlerle elde edilen tanımlayıcılar, mesajları ve klasörleri almak için kullanılabilir.

NOTE: Avantajlarına rağmen, bu yöntemler kullanılarak bile okunamayan bozuk depolama alanlarının bulunduğu belirtilmelidir.

PST Dosyası Gezinme

Aşağıdaki kod örneği, PST dosyasını gezinmeyi ve klasörleri ile mesajları çıkarmayı gösterir. Tanımlayıcıların listesini almak için FindMessages ve FindSubfolders yöntemlerini kullanın. Ardından tanımlayıcı şuna geçilir: ExtractMessage veya GetFolderById elemanları çıkarmak için yöntem.

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);
        }
    }
}