Odczyt uszkodzonych plików PST/OST
Obsługa uszkodzonych plików magazynu
Czasami nie jest możliwe odczytanie pliku PST/OST z powodu różnych problemów. Na przykład niektóre bloki danych mogą być uszkodzone. W takich przypadkach zwykle pojawiają się wyjątki podczas wywoływania EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, itp. metody. Jednak pojedyncze wiadomości lub foldery mogą pozostać nienaruszone w magazynie.
Metody znajdowania identyfikatorów elementów
Poniższe metody umożliwiają znajdowanie identyfikatorów elementów w sposób hierarchiczny.
- FindMessages(string parentEntryId) - znajduje identyfikatory wiadomości dla folderu.
- FindSubfolders(string parentEntryId) - znajduje identyfikatory podfolderów dla folderu.
Identyfikatory uzyskane przy użyciu metod mogą być użyte do pobrania wiadomości i folderów.
UWAGA: Należy zauważyć, że pomimo zalet istnieją uszkodzone magazyny, które nie mogą być odczytane nawet przy użyciu tych metod.
Przeglądanie pliku PST
Poniższy przykład kodu pokazuje przeglądanie pliku PST oraz wyodrębnianie folderów i wiadomości. Aby uzyskać listę identyfikatorów, użyj metod FindMessages i FindSubfolders. Następnie identyfikator jest przekazywany do ExtractMessage lub GetFolderById metoda do wyodrębniania elementów.
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);
}
}
}