读取损坏的 PST/OST 文件
Contents
[
Hide
]
处理损坏的存储文件
有时由于某些问题可能无法读取 PST/OST。例如,某些数据块可能已损坏。在这种情况下,调用时通常会抛出异常 EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders,等方法。但存储中的单个邮件或文件夹可能仍保持完好。
查找项目标识符的方法
以下方法可以分层查找项目标识符。
- FindMessages(string parentEntryId) - 查找该文件夹的邮件标识符。
- FindSubfolders(string parentEntryId) - 查找该文件夹的子文件夹标识符。
使用这些方法获得的标识符可用于检索邮件和文件夹。
注意: 需要指出的是,尽管有这些优势,仍有损坏的存储即使使用这些方法也无法读取。
PST 文件遍历
以下代码示例展示了 PST 文件遍历以及提取文件夹和邮件。要获取标识符列表,请使用 FindMessages 和 FindSubfolders 方法。然后将标识符传递给 ExtractMessage 或 GetFolderById 用于提取元素的方法。
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);
}
}
}