Baca File PST/OST Rusak

Menangani File Penyimpanan yang Rusak

Kadang-kadang tidak memungkinkan untuk membaca PST/OST karena beberapa masalah. Misalnya, beberapa blok data mungkin rusak. Dalam kasus tersebut, biasanya terjadi pengecualian saat memanggil EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, dll. metode. Namun pesan atau folder individu mungkin tetap tidak rusak di dalam penyimpanan.

Metode untuk Menemukan Pengidentifikasi Item

Metode berikut memungkinkan menemukan pengidentifikasi item secara hierarkis.

Pengidentifikasi yang didapatkan dengan menggunakan metode tersebut dapat digunakan untuk mengambil pesan dan folder.

NOTE: Harap dicatat bahwa meskipun memiliki kelebihan, ada penyimpanan yang rusak yang tidak dapat dibaca bahkan dengan metode ini.

Penelusuran File PST

Contoh kode berikut menunjukkan penelusuran file PST serta ekstraksi folder dan pesan. Untuk mendapatkan daftar pengidentifikasi, gunakan metode FindMessages dan FindSubfolders. Kemudian pengidentifikasi tersebut diteruskan ke ExtractMessage atau GetFolderById metode untuk mengekstrak elemen.

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