لماذا حجم المرفق المقدم من واجهة برمجة Outlook خاطئ دائمًا؟
سؤال
في محاولة لاستخدام Outlook interop في C#، لاحظت شيئًا فضوليًا.
- أولا أحصل على حجم المرفق مع المرفق.
- ثانياً ، أحفظ المرفق في ملف باستخدام المرفق. طريقة saveasfile.
بمقارنة الحجم الحقيقي للملف المحفوظ والحجم الذي قدمته Outlook ، لاحظت أن الملف الحقيقي المحفوظ دائمًا أصغر من المتوقع Attachment.Size
. يبدو أن الملفات المحفوظة صالحة ولا يتم اقتطاعها.
نتائج العينة http://www.freeimagehosting.net/uploads/224d342eba.png
إذن ، ما الخطأ في ذلك؟ هل هناك خطأ في Attachment.Size
؟ أو ربما من المتوقع أن تعطي شيئًا آخر غير حجم المرفق؟
اعتقدت أنه يحول CR إلى CRLF ، بما في ذلك الملفات الثنائية ، والتي قد تفسر النفقات العامة ، ولكن بعض الملفات المرفقة في تنسيق نص خام مع CRLF ، لذلك هذه الفرضية خاطئة.
أول تحرير:
لا يكون ترميز BASE64 ، لأن ترميز BASE64 سيكون:
- 4/3 نسبة. في حالتي ، لدي نسبة ليست بعيدة عن 1.0.
- متناسب. ليس هذا هو الحال هنا: يحتوي ملف 1.9 ميغابايت على عام 181 بايت ، في حين أن ملف 27 كيلو بايت يحتوي على 3 كيلو بايت.
الآن ، بالنظر إلى النفقات العامة العشوائية تقريبًا في نطاق من 89 إلى 3658 بايت ، أوافق على أنه قد يكون بعض الرؤوس الغريبة.
التحرير الثاني:
لقد اختبرت هذا على مجموعة أكبر من الملفات. ما لاحظته هو أن الفرق بين حجم الملف الحقيقي والحجم المقدم من Outlook:
- هو دائما صفر لمرفق .msg. لكن. MSG هو حالة خاصة للغاية ولديها سلوك غريب للغاية.
- هو تأثر بواسطة كل من امتداد الملف وطول اسم الملف.
- لنفس تمديد الملف ، في معظم الحالات ، ولكن ليس دائما, ، أكبر عندما يكون طول اسم الملف أكبر.
هنا مثال:
alt text http://www.freeimagehosting.net/uploads/a767d3cacf.png
IMHO ، Outlook يفعل شيئا ما مع اسم الملف ، نوع من الترميز الغريب للغاية ، ربما جيل من معرف فريد بناءً على اسم الملف. هذا يعني ذاك:
- عندما يكون الملف أكبر ، يكون المعرف الفريد أكبر أيضًا.
- عندما يحدث التصادم ، يحدث شيء ما للمعرف الفريد ، مما يجعله أكبر بكثير: الصف 18 لديه نفس اسم الملف مثل الصف 11 ، لكن الملف ليس هو نفسه ؛ من ناحية أخرى ، الصفوف 12 و 13 و 14 لها نفس الملف.
المحلول
لست متأكدًا ، لكنني أفترض أنه قد يكون رؤوس MIME و/أو ترميز النفقات العامة. لمزيد من المعلومات ، انظر إلى هذه مقال ويكي حول BASE64 والبحث عن كلمة النفقات العامة.
تحرير: عذرًا ، لم أكن واضحًا جدًا ، قصدت مقالة BASE64 تمامًا كمثال على أنه قد يكون هناك علاقات عامة مرتبطة بالترميز ، وليس أنها كانت في الواقع BASE64 لأنه ، كما ذكر الآخرين ، قد يكون BASE64 أكبر بكثير من تلك الاختلافات.