Becky のファイル構造のことを書いたついでに、私が利用できるもう一つのメール環境・Outlook Express のファイル構造についても書いてみたい。
Outlook Expressには、Folders.dbxと受信トレイ.dbxなどの2種類のファイルがある。 同じdbxファイルだが、Folders.dbxは他のdbxファイルと異なり、Outlook Expressのフォルダー一覧を表示するのに用いられる。 Folders.dbxには ① フォルダー名と、各フォルダーの階層関係 ② フォルダーに対応するdbxファイル名の指定 受信トレイ⇒受信トレイ.dbxなどフォルダー名と同じ。 Outlook Express・ローカルフォルダーにはdbxファイルはない。 ③ 各フォルダー毎のメールの総件数・未読件数 などが保存されている。 受信トレイ.dbx・送信済みアイテム.dbxなどのファイルには、送受信したメールが保存される。 各dbxファイルは【ディレクトリ情報】、【ファイル情報】、【メッセージ情報】の3つの情報で、メールを管理する。 Outlook Expressのメッセージ一覧は【ディレクトリ情報】と【ファイル情報】の2つを組み合わせて表示される。 【ディレクトリ情報】はファイル情報へのポインタ(=ヒモ付け)だけを持つ。 1対複数。 メールの件名・差出人・送信日時などの情報は【ファイル情報】が持ち、【メッセージ情報】への1対1のポインタを持つ。 それぞれの関係は、左図のようになる。 ルートディレクトリからは、最大51件のファイル情報がヒモ付けされる。 件数が51件を超えた時は、子ディレクトリが作成され、ルートディレクトリからヒモ付けされる。 ルートディレクトリから子ディレクトリのヒモ付けも最大51件。 51×51を超えると、さらに孫ディレクトリが…。 ルートディレクトリへのポインタは、アドレス 0x00E4番地に保存されている。 【メッセージ情報】は1つのメールのサイズが大きい時、複数に分割されヒモ付けされる。 【ディレクトリ】 ※2 子および孫からはすぐ上のディレクトリへのポインタ ※3 ボディ(1)、ボディ(2)…の組の数(最大51個) ※4 子の格納データ数 (子の※3と同じ数) ディレクトリはルート・子・孫とも、同形式・同サイズ (ヘッド 24バイト+ボディ 612バイト(=12バイト×51件) =636バイト) 前にも書いたように【ディレクトリ情報】にはポインタしか持っていない。 次の【ファイル情報】が持っている「件名」などとセットで、メッセージ一覧を構成する。 【ファイル情報】 =ヘッド(固定)12バイト+ボディ(※1のバイト数) ボディ=インデックス部(4バイト×件数 ※2) + 補足情報 ずいぶん分かりにくいが、各インデックスあるいは各インデックス+捕捉情報の組み合わせで、件名・差出人・送信日時などの情報を保存する。 インデックス4バイトは 1ビット+7ビット+3バイトと分かれている。 先頭の1ビット メールの優先順位などの短い情報は、’1’にして直接インデックスに持たせる。 件名など3バイトに収まらない情報は、、’0’にして補足情報に書き込む。 そしてインデックスには、その補足情報へのポインタを持たせる。 次の7ビットの意味 必要な情報が3バイト以内なら、ここに直接値が書き込まれる。 3バイトを超える情報は補足情報に書き込まれ、そのポインタを保存。 ともに、最初の1ビットとの組み合わせ。 例1) 91(=1+0x11) 24 08 00 ⇒メッセージ長が2084バイト(=0x000824) 例2) 08(=0+0x08) 53 00 00 で、かつ補足情報の 0x53バイト目に8E 6C 8D 91 97 B7 8D 73 (=シフトジスコードで四国旅行)の文字列があれば、 ⇒ 件名が「四国旅行」 補足情報の各項目の区切りは、文字項目の後ろに0x00が、数字項目の後には0x01がセパレータとして用いられる。 送信日時などは、Beckyとは異なり64ビットの(C#DateTime型)の日付。 文字列ではなく、バイナリ値。 インデックスの中で最も重要なのは0x04で、続くメッセージブロックへのポインタとなっている。 【メッセージ情報】 ヘッダ16バイト+ボディ512バイト=528バイト 長いメッセージたとえば2000バイトの情報を保存する場合は、512×3+464に分割される。 最初の3つのブロックの※2=512、※3には続きのブロックへのポインタ、最後のブロックの※2=464、※3=0となる。 いずれのブロックにも※1=512の固定値、最後のブロックの※4の465バイト以降には0が詰められる。 オブジェクトマーク 【ディレクトリ情報】、【ファイル情報】、【メッセージ】の各先頭にあるオブジェクトマークは、そこから情報が始まることを示すもの。 ファイルの先頭からのアドレスそのものが書かれる。
by t_ichib
| 2009-05-03 08:36
| 今日もまた老年プログラマー
|
プロフィール
カテゴリ
以前の記事
その他のジャンル
記事ランキング
|
ファン申請 |
||