Outlookプログラミングインターフェイスによって与えられる添付ファイルサイズが常に間違っているのはなぜですか?
質問
C#でOutlook Interopを使用しようとすると、私は奇妙なことに気づきました。
- 最初に、添付ファイルのサイズを取得します attachment.sizeプロパティ.
- 第二に、私は使用してファイルに添付ファイルを保存します attachment.saveasfileメソッド.
保存されたファイルの実際のサイズとOutlookで与えられるサイズを比較すると、実際の保存されたファイルは常に予想よりも小さいことがわかります Attachment.Size
. 。保存されたファイルは有効であり、切り捨てられていないようです。
サンプル結果http://www.freeimagehosting.net/uploads/224d342eba.png
それで、それの何が問題なのですか?バグはありますか Attachment.Size
?それとも、添付ファイルのサイズ以外の何かを与えることが期待されるのでしょうか?
CRをCRLFに変換すると思いました。これには、オーバーヘッドを説明するバイナリファイルを含むことができますが、一部の添付ファイルはCRLFを使用した生のテキスト形式であるため、この仮説は間違っています。
最初の編集:
base64エンコードは次のとおりです。
- 4/3比。私の場合、1.0からそれほど遠くない比率があります。
- 比例。ここではそうではありません:1.9 MBファイルのオーバーヘッドは181バイトですが、27 kbファイルのオーバーヘッドは3 kbです。
さて、89〜3658バイトの範囲でほぼランダムなオーバーヘッドを見ると、私はそれがいくつかの奇妙なヘッダーかもしれないことに同意するでしょう。
2回目の編集:
これをより大きなファイルのセットでテストしました。私が気づいたのは、Outlookで与えられる実際のファイルサイズとサイズの違い:
- .msgアタッチメントの場合、常にゼロです。しかし、.msgの添付ファイルは非常に特別なケースであり、非常に奇妙な動作をしています。
- は 影響を受けて ファイル拡張子とファイル名の長さの両方によって。
- 同じファイル拡張機能の場合、ほとんどの場合、 常にではない, 、ファイル名の長さが大きくなると大きくなります。
これが例です:
Alt Text http://www.freeimagehosting.net/uploads/a767d3cacf.png
私見、Outlookはそうします なにか ファイルの名前があり、ある種の非常に奇妙なエンコード、おそらくユニークな識別子の世代が ファイル名に基づいています. 。この意味は:
- ファイルが大きい場合、一意の識別子も大きくなります。
- 衝突が発生すると、一意の識別子に何かが発生し、それをはるかに大きくします。行18は行11と同じファイル名を持っていますが、ファイルは同じではありません。一方、行12、13、14の行は同じファイルを持っています。
解決
よくわかりませんが、マイムヘッダーやオーバーヘッドのエンコードである可能性があると思います。詳細については、をご覧ください これ base64に関するwikiの記事とオーバーヘッドという単語を検索します。
編集:申し訳ありませんが、私はそれほど明確ではありませんでした、私はベース64の記事を意味しました。エンコードに関連するオーバーヘッドがあるかもしれないという例として、それは実際にはbase64であったのではありません。それらの違いよりも。