Číst poškozené soubory PST/OST
Zpracování poškozených souborů úložiště
Někdy může být čtení PST/OST nemožné kvůli určitým problémům. Například některé datové bloky mohou být poškozené. V takových případech se při volání obvykle vyskytují výjimky při volání EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, atd. metody. Ale jednotlivé zprávy či složky mohou zůstat v úložišti nepoškozené.
Metody pro nalezení identifikátorů položek
Následující metody umožňují najít identifikátory položek hierarchickým způsobem.
- FindMessages(string parentEntryId) - najde identifikátory zpráv pro složku.
- FindSubfolders(string parentEntryId) - najde identifikátory podsložek pro složku.
Identifikátory získané pomocí metod lze použít k získání zpráv a složek.
POZNÁMKA: Je třeba poznamenat, že i přes své výhody existují poškozená úložiště, která nelze přečíst ani pomocí těchto metod.
Procházení PST souboru
Níže uvedený ukázkový kód ukazuje procházení PST souboru a extrahování složek a zpráv. Pro získání seznamu identifikátorů použijte metody FindMessages a FindSubfolders. Pak je identifikátor předán do ExtractMessage nebo GetFolderById metoda pro extrahování prvků.
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);
}
}
}