破損した PST/OST ファイルを読み取る
Contents
[
Hide
]
破損したストレージファイルの処理
場合によっては、いくつかの問題により PST/OST を読み取れないことがあります。たとえば、データブロックが破損していることがあります。そのような場合、呼び出し時に例外が発生することが通常です。 EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders、などのメソッドです。ただし、個々のメッセージやフォルダーはストレージ内で損傷せずに残る場合があります。
アイテム識別子を検索するメソッド
以下のメソッドは、階層的にアイテム識別子を検索できるようにします。
- FindMessages(string parentEntryId) - フォルダー内のメッセージの識別子を取得します。
- FindSubfolders(string parentEntryId) - フォルダーのサブフォルダーの識別子を取得します。
これらのメソッドで取得した識別子は、メッセージやフォルダーの取得に使用できます。
NOTE: これらの方法には利点があるものの、これらの方法でも読み取れない破損したストレージがあることに注意してください。
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);
}
}
}