Ler Arquivos PST/OST Corrompidos
Manipulação de Arquivos de Armazenamento Corrompidos
As vezes pode não ser possível ler um PST/OST devido a alguns problemas. Por exemplo, alguns blocos de dados podem estar corrompidos. Nesses casos, exceções geralmente surgem ao chamar o EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, etc. métodos. Mas mensagens ou pastas individuais podem permanecer intactas no armazenamento.
Métodos para Encontrar os Identificadores de Itens
Os métodos a seguir permitem encontrar identificadores de itens de forma hierárquica.
- FindMessages(string parentEntryId) - encontra os identificadores das mensagens para a pasta.
- FindSubfolders(string parentEntryId) - encontra os identificadores das subpastas para a pasta.
Os identificadores obtidos usando os métodos podem ser usados para recuperar mensagens e pastas.
NOTA: Deve-se observar que, apesar de suas vantagens, existem armazenamentos corrompidos que não podem ser lidos mesmo usando esses métodos.
Travessia de Arquivo PST
O exemplo de código a seguir mostra a travessia de arquivos PST e a extração de pastas e mensagens. Para obter a lista de identificadores, use os métodos FindMessages e FindSubfolders. Em seguida, o identificador é passado para o ExtractMessage ou GetFolderById método para extrair elementos.
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);
}
}
}