Почему размер вложения, заданный интерфейсом программирования Outlook, всегда неверен?
Пытаясь использовать Outlook Interop в C#, я заметил любопытную вещь.
- Сначала я получаю размер вложения с помощью свойства Attachment.Size.
- Во-вторых, я сохраняю вложение в файл, используя метод Attachment.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 - это особый случай и очень странное поведение.
- На него влияют как расширение файла, так и длина имени файла.
- Для того же расширения файла, в большинстве случаев, но не всегда, больше, когда длина имени файла больше.
Вот пример:
http://www.freeimagehosting.net/uploads/a767d3cacf.png
ИМХО, Outlook что- то делает с именем файла, какая-то очень странная кодировка, возможно генерация уникального идентификатора на основе имени файла. Это означает, что:
- когда файл больше, уникальный идентификатор тоже больше.
- когда происходит столкновение, что-то происходит с уникальным идентификатором, делая его намного, намного больше: строка 18 имеет то же имя файла, что и строка 11, но файл не совпадает; с другой стороны, строки 12, 13 и 14 имеют один и тот же файл.
1 ответ
Я не уверен, но я бы предположил, что это могут быть заголовки MIME и / или издержки кодирования. Для получения дополнительной информации, посмотрите эту статью в Вики о Base64 и найдите слово overhead.
Изменить: Извините, я не очень ясно, я имел в виду статью Base64 просто как пример того, что могут быть накладные расходы, связанные с кодированием, а не то, что это был на самом деле Base64, поскольку, как упоминалось другими, накладные расходы Base64, вероятно, будет гораздо больше чем эти различия.